Как отловить 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
        }
    }
});
Другие вопросы по тегам