JavaFX的任务似乎消耗了异常。它是一个错误还是一个功能?
请考虑以下代码:
Thread.setDefaultUncaughtExceptionHandler((Thread t, Throwable e) -> {
System.out.println("An exception occurred!");
});
// set the exception handler for the JavaFX application thread
Thread.currentThread().setUncaughtExceptionHandler((Thread t, Throwable e) -> {
System.out.println("An exception occurred!");
});
Task<?> task = new Task() {
@Override
public Void call() throws Exception {
throw new RuntimeException("foobar");
};
};
new Thread(task).start();
如果我们运行代码,运行时异常永远不会触发默认的异常处理程序,而是由任务使用。我发现的抵消这种情况的唯一方法是在 task.setOnFailed 中重新抛出异常:
task.setOnFailed((WorkerStateEvent t) -> {
throw new RuntimeException(task.getException());
});
既然JavaFX 8现在支持UncaughtExceptionHandler,为什么异常没有传播到异常处理程序呢?