加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-14 05:44:27 所属栏目:Java 来源:网络整理
导读:我想在我的 Java应用程序中定义一个应用程序级别的UncaughtExceptionHandler,如果在我的应用程序的一个线程中抛出一个未捕获的异常,那么它将被调用. 我知道这是可能定义一组未知的异常( ThreadGroup),我实际上正在使用它,但是我想为没有定义自己未捕获的异常
我想在我的 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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读