如何捕获 ExceptionInInitializerError?

How to catch ExceptionInInitializerError?

我想安装某种全局处理程序来捕获任何 ExceptionInInitializerError,当某些 class 正在加载时,它可能从任何静态块中抛出。目前它将堆栈跟踪转储到 stderr 并退出应用程序。我想使用我的日志记录框架记录堆栈跟踪,然后退出应用程序。可能吗?

看起来 Thread.UncaughtExceptionHandler 就是您要查找的内容。

answer 将为您提供更多信息。

本质上你需要尽快安装默认异常处理程序:

        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
        }
    }
});