如何在Java中捕获AWT线程异常?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (11)

我们希望在我们的应用程序日志中记录这些异常 - 默认情况下,Java将它们输出到控制台。

提问于
用户回答回答于

美国东部时间和美国东部时间以外的未捕获的例外有区别。

另一个问题有两个解决方案,但如果你只想要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())
  }
}
用户回答回答于

自从Java 7以来,你必须以不同的方式做这件事,因为sun.awt.exception.handler黑客不再工作。

这里是解决方案(来自Java 7中的Uncaught AWT异常)。

// 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());
    }
});

扫码关注云+社区