微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我想在我的 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.

原文地址:https://www.jb51.cc/java/121507.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐