0

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

4

2 回答 2

1

看起来 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 
            }
        }
    });
于 2016-07-03T13:37:36.787 回答
1

也许您可以创建一个全局异常处理程序,然后将您的异常过滤掉。

例子

Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
    public void uncaughtException(Thread t, Throwable e) {
        if (e instanceof ExceptionInInitializerError) {
            //Your handler code
        }
    }
});
于 2016-07-03T13:40:39.423 回答