如何捕获 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
}
}
});
我想安装某种全局处理程序来捕获任何 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
}
}
});