【发布时间】:2014-12-29 21:07:22
【问题描述】:
我不确定为什么没有调用 uncaughtException 方法。
static
{
/**
* Register a logger for unhandled exceptions.
*/
Thread.UncaughtExceptionHandler globalExceptionHandler = new Thread.UncaughtExceptionHandler()
{
@Override
public void uncaughtException(Thread t, Throwable e)
{
System.out.println("handle exception."); // can also set bp here that is not hit.
}
};
Thread.setDefaultUncaughtExceptionHandler(globalExceptionHandler);
Thread.currentThread().setUncaughtExceptionHandler(globalExceptionHandler);
/**
* Register gateway listen port.
*/
try
{
// some stuff that raises an IOException
}
catch (IOException e)
{
System.out.println("Throwing exception");
throw new RuntimeException(e);
}
}
程序输出为:
抛出异常
java.lang.ExceptionInInitializerError
Caused by: java.lang.RuntimeException: java.io.FileNotFoundException: blah.jks
(The system cannot find the file specified)
...some stack trace...
Exception in thread "main"
Process finished with exit code 1
【问题讨论】:
-
Statis 部分在 JVM 中特别受到威胁,因为这是类的初始部分,所以我认为它真的取决于 JDK 的实现。例如,我的 Oracle JDK 1.7.0_65 正确处理异常。
-
可能是因为异常处理正确,即线程终止。除非您实际上是在主线程之外生成线程,否则我不会使用这种处理方式。
标签: java uncaughtexceptionhandler