如何在Java中捕获AWT线程异常?
2022-09-02 20:58:58
我们希望在应用程序日志中跟踪这些异常 - 默认情况下,Java 仅将它们输出到控制台。
我们希望在应用程序日志中跟踪这些异常 - 默认情况下,Java 仅将它们输出到控制台。
从Java 7开始,你必须以不同的方式做到这一点,因为黑客不再起作用。sun.awt.exception.handler
这是解决方案(来自Java 7中的Uncaught AWT Exceptions)。
// Regular Exception
Thread.setDefaultUncaughtExceptionHandler(new ExceptionHandler());
// EDT Exception
SwingUtilities.invokeAndWait(new Runnable()
{
public void run()
{
// We are in the event dispatching thread
Thread.currentThread().setUncaughtExceptionHandler(new ExceptionHandler());
}
});
EDT 中未捕获的异常与 EDT 外部的异常之间存在区别。
另一个问题对两者都有解决方案,但如果你只想咀嚼EDT部分......
class AWTExceptionHandler {
public void handle(Throwable t) {
try {
// insert your exception handling code here
// or do nothing to make it go away
} catch (Throwable t) {
// don't let the exception get thrown out, will cause infinite looping!
}
}
public static void registerExceptionHandler() {
System.setProperty('sun.awt.exception.handler', AWTExceptionHandler.class.getName())
}
}