我有一个使用swing的Java应用程序。我找到了一种方法来捕获应用程序中所有未捕获的异常(见下文)。我想记录一条消息,显示一个包含用户消息的对话框并终止该应用程序。问题是,我想要抓住的是一些摆动异常。由于Swing线程已停止,因此在UncaughtExceptionHandler中捕获异常后尝试显示对话框是不可能的。有什么方法可以显示对话框吗?创建一个新的swing线程或类似的东西?
谢谢!
Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
boolean alreadyCaught = false;
public void uncaughtException(Thread t, Throwable e) {
if (alreadyCaught)
return;
alreadyCaught = true;
e.printStackTrace();
//show Dialog
}
});
答案 0 :(得分:3)
完全可以显示默认的未捕获异常处理程序的对话框。我们的一个产品在过去的5年中使用这种机制没有任何问题。
由于异常杀死当前的EDT,我们在替换EDT时遇到了问题的解决方法。我们使用
而不是使用常规SwingUtilities#invokeLater
来显示对话框
new Thread( new Runnable() {
public void run() {
EventQueue.invokeLater( aRunnable );
}
} ).start();
这允许将EDT替换为新的EDT,并在新创建的EDT上运行Runnable
。