ale*_*oot 13 java exception-handling exception uncaught-exception
我想在我的Java应用程序中定义一个应用程序级别UncaughtExceptionHandler,如果在我的应用程序的一个线程中抛出未捕获的异常,则调用该应用程序.我知道可以为一组线程(ThreadGroup)定义一个未捕获的异常,我实际上正在使用它,但我想为没有定义自己的未捕获异常处理程序的线程定义一个全局未捕获的异常,或者是没有与一组定义了默认异常处理程序的线程相关联.
所以例如我想达到这样的东西:
1° LEVEL ---> Call thread own UncaughtExceptionHandler ---> 2° LEVEL Call Thread Group UncaughtExceptionHandler ---> 3° LEVEL Call application(default) UncaughtExceptionHandler
Run Code Online (Sandbox Code Playgroud)
简单来说,我想覆盖默认的UncaughtExceptionHandler并定义我自己的处理程序而不是打印堆栈跟踪System.err(这是默认行为).
例如,在C#.NET中,我执行类似的操作,处理应用程序的Main()方法中的未处理和线程异常事件处理程序:
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
Run Code Online (Sandbox Code Playgroud)
即使在Java中也可以完成?
如何在Java中覆盖默认的UncaughtExceptionHandler?
Joh*_*int 17
Thread.setDefaultUncaughtExceptionHandler(UncaughtExceptionHandler ex)
这应该达到你想要的.
正如医生所说
设置当线程由于未捕获的异常而突然终止时调用的默认处理程序,并且没有为该线程定义其他处理程序.
关于在ThreadGroup中使用处理程序的一个有趣的注释(也在文档中)
请注意,默认的未捕获异常处理程序通常不应该遵循线程的ThreadGroup对象,因为这可能导致无限递归.
您需要设置默认的未捕获异常处理程序.这是Thread类上的静态方法,名为setDefaultUncaughtExceptionHandler.这样做会为运行的应用程序设置异常处理程序.除非另有说明,否则它将是任何新线程的默认值.
| 归档时间: |
|
| 查看次数: |
8542 次 |
| 最近记录: |