我想在我的
Java应用程序中定义一个应用程序级别的UncaughtExceptionHandler,如果在我的应用程序的一个线程中抛出一个未捕获的异常,那么它将被调用.
我知道这是可能定义一组未知的异常( ThreadGroup),我实际上正在使用它,但是我想为没有定义自己未捕获的异常处理程序的线程定义全局未捕获的异常,或者不与一组定义了一个默认异常处理程序的线程相关联.
我知道这是可能定义一组未知的异常( 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.