gpt4 book ai didi

java - 如何在开发过程中在一个地方捕获来自不同线程的所有未捕获异常?

转载 作者:搜寻专家 更新时间:2023-10-31 20:01:00 25 4
gpt4 key购买 nike

我有一个不小的多线程应用程序,带有 GUI 和套接字通信。在开发过程中,我发现有时会有一些异常没有被捕获和记录。如果有的话,我必须盯着控制台才能得到它们。

有没有办法在一个地方捕获那些来自不同线程(包括 EDT)的未捕获异常,比如在 main() 中,并记录它们?我确实在 ma​​in() 中放置了一个 try-catch 来捕获 Throwable 但它不起作用。

编辑:

更具体地说,我有 Executors.newCachedThreadPool()Runnable。在很多情况下我不想使用 Callable 因为我不想阻塞我的调用线程。那我怎样才能从那些 Runnable 中捕获异常呢?

还有我如何从 Swing EDT 捕获你未捕获的异常

最佳答案

我建议设置类型为 UncaughtExceptionHandler 的自定义处理程序对于未捕获的异常,使用方法 Thread.setDefaultUncaughtExceptionHandler .当线程由于未捕获的异常而即将终止时,JVM 将调用此处理程序。

    Thread.setDefaultUncaughtExceptionHandler((Thread t, Throwable e) -> {
System.out.println(t + " throws exception: " + e);
});

更新:

至于 Swing EDT 案例,我认为有很好的答案 here .

关于java - 如何在开发过程中在一个地方捕获来自不同线程的所有未捕获异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34202884/

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