gpt4 book ai didi

java - 为我的应用程序的所有线程定义一个全局 UncaughtExceptionHandler

转载 作者:搜寻专家 更新时间:2023-10-30 21:02:57 24 4
gpt4 key购买 nike

我想在我的 Java 应用程序中定义一个应用程序级别 UncaughtExceptionHandler,如果在我的应用程序的一个线程中抛出未捕获的异常,则调用它。我知道可以为一组线程 (ThreadGroup) 定义一个未捕获的异常,我实际上正在使用它,但我想为没有定义自己的未捕获异常的线程定义一个全局未捕获的异常异常处理程序或与一组定义了默认异常处理程序的线程无关的线程。

例如,我想达到这样的目的:

1° LEVEL ---> Call thread own UncaughtExceptionHandler ---> 2° LEVEL Call Thread Group UncaughtExceptionHandler ---> 3° LEVEL Call application(default) UncaughtExceptionHandler 

简单来说,我想覆盖默认的 UncaughtExceptionHandler 并定义我自己的处理程序,而不是在 System.err 上打印堆栈跟踪(这是默认行为)。

例如,在 C# .NET 中,我在应用程序的 Main() 方法中做了类似处理未处理线程异常 事件处理程序的事情:

AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException); 
Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);

甚至可以在 Java 中完成?

我如何覆盖 Java 中的默认 UncaughtExceptionHandler?

最佳答案

Thread.setDefaultUncaughtExceptionHandler(UncaughtExceptionHandler ex)

这应该可以达到您的要求。

正如文档所说

Set the default handler invoked when a thread abruptly terminates due to an uncaught exception, and no other handler has been defined for that thread.

关于您在 ThreadGroup 中使用处理程序的有趣说明(也在文档中)

Note that the default uncaught exception handler should not usually defer to the thread's ThreadGroup object, as that could cause infinite recursion.

关于java - 为我的应用程序的所有线程定义一个全局 UncaughtExceptionHandler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8362345/

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