gpt4 book ai didi

java - AWT 队列线程中的调试异常

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:55:10 25 4
gpt4 key购买 nike

我正在开发一个 Swing 应用程序,其中包含一个执行自定义绘画的组件。当我在绘画代码中出错并抛出异常时,这种情况很难调试。弹出窗口显示异常信息,而不是被调试器捕获。此外,the thread seems to be restarted , 由于异常是编码错误导致的,所以会反复显示。

当我幸运地切换到调试器时(这很困难,因为随着应用程序收到绘制请求,越来越多的弹出窗口不断出现),调试控制台向我显示如下异常信息:

SEVERE: Uncaught exception thrown in Thread[AWT-EventQueue-0,6,main]

.... stack follows

我的应用程序是用 Scala 编写的,我使用的是 IntelliJ IDEA 14。调试器可以很好地处理我未捕获的主线程异常(我为 Any exception 启用了 Uncaught exception > 在 Java Exception Breakpoints 中启用了断点),但 AWT 线程中的异常不是。

我已尝试按照 this How can I detect when an Exception's been thrown globally in Java? answer 中的说明安装处理程序,但我的处理程序似乎没有被触发。

我想实现以下(按重要性排序):

  1. 避免 AWT 线程在异常时重新启动,或者至少防止弹出窗口显示
  2. 在调试器中处理未捕获的异常,而不是在控制台中打印

(注意:虽然这是 Scala 应用程序,但我认为 Java 的行为是相同的,因此使用 Java 标记)。

最佳答案

根据这个link ,您必须同时处理常规 ExceptionEDT Exception 而无需使用旧的 sun.awt.exception.handler hack(不再有效自 Java 7)

这是你的ExceptionHandler

public static class ExceptionHandler implements Thread.UncaughtExceptionHandler
{
public void uncaughtException(Thread thread, Throwable thrown)
{
// TODO handle your Exception here
}
}

用法:

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

关于java - AWT 队列线程中的调试异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27603348/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com