Я не уверен, почему метод uncaughtException не вызывается.UncaughtExceptionHandler не исключение catch
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 корректно обрабатывает исключение. – terma
Возможно, потому что исключение обрабатывается правильно, то есть поток прекращается. Я бы не использовал эту обработку, если вы фактически не создаете потоки вне основного потока. –