Java未捕获所有线程的全局异常处理程序

时间:2015-10-26 11:11:06

标签: java exception-handling

我问了一个关于如何覆盖默认Java异常处理here的问题,并被告知答案为here

现在的问题是:有没有办法将这个处理程序生成所有线程而不在每个线程中明确声明?

我认为应该可以以某种方式获取所有线程,然后将它们绑定到异常处理程序?

3 个答案:

答案 0 :(得分:4)

使用Thread.setDefaultUncaughtExceptionHandler。正如javadoc所说:

  

“通过设置默认的未捕获异常处理程序,应用程序可以更改已经接受任何”默认“行为的线程处理未捕获异常的方式(例如,记录到特定设备或文件)提供“。

显然,如果一个线程已经有一个(非默认的)处理程序,那么它不会受到默认行为更改的影响。

  

我认为应该可以以某种方式获取所有线程,然后将它们绑定到异常处理程序?

除非您想要更改线程的非默认处理程序,否则没有必要。如果确实需要这样做,可以通过遍历应用程序的ThreadGroup层次结构来查找所有线程。 (除非您的应用程序是沙盒...)

<强> 修改

可以使用this answer找到正在运行的应用的主题列表:

Set<Thread> threadSet = Thread.getAllStackTraces().keySet();

答案 1 :(得分:0)

如果我做对了,你可以使用Thread.setDefaultUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh)

请参阅Thread.setDefaultUncaughtExceptionHandler

答案 2 :(得分:0)

Thread

中有一个方法setDefaultUncaughtExceptionHandler