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

2022-09-02 20:58:58

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


答案 1

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

答案 2

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

推荐