Как отловить ExceptionInInitializerError?
Я хочу установить какой-то глобальный обработчик, чтобы поймать любой ExceptionInInitializerError
которая может быть выброшена из любого статического блока при загрузке некоторого класса. В настоящее время он выводит трассировку стека в stderr и выходит из приложения. Я хочу записать трассировку стека, используя мою структуру ведения журнала, а затем выйти из приложения. Является ли это возможным?
2 ответа
Решение
Похоже, Thread.UncaughtExceptionHandler - это то, что вы ищете.
Этот ответ предоставит вам больше информации.
По сути, вам нужно установить обработчик исключений по умолчанию как можно скорее:
Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
public void uncaughtException(Thread t, Throwable e) {
if (e instanceof ExceptionInInitializerError) {
// do something with you're exception
// and than close application
System.exit(-1); // passing
}
}
});
Может быть, вы можете сделать глобальный обработчик исключений и просто отфильтровать из него свое исключение.
пример
Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
public void uncaughtException(Thread t, Throwable e) {
if (e instanceof ExceptionInInitializerError) {
//Your handler code
}
}
});