当前位置: 首页 > 面试题库 >

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

计和顺
2023-03-14
问题内容

我问一个有关如何覆盖默认的Java异常处理问题,被告知的答案在这里。

现在的问题是:是否有一种方法可以将该处理程序泛化为所有线程,而无需在每个线程中明确声明?

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


问题答案:

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

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

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

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

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

编辑

使用以下答案可以找到正在运行的应用程序的线程列表:

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


 类似资料:
  • 问题内容: 我有一个应用程序,需要编写一个自定义的全局未捕获的异常处理程序。我已经阅读了所有stackoverflow线程,并且其中每个线程都只是缺少一个清晰而简单的示例,说明了如何实现这一点。 考虑以下简单示例: 它抛出一个标准异常,它只是一个标准输出。我如何实现自己的异常,该异常可以通过将错误输出到日志文件中的简单方法覆盖标准异常?显然,实际的应用程序要大得多,我们正在谈论未捕获的异常,这就是

  • 问题内容: 有没有一种方法可以在Java中创建全局异常处理程序。我想这样使用: 处理程序可能无法捕获在主体中引发的异常。 马丁 问题答案: 使用Thread.setDefaultUncaughtExceptionHandler。有关示例,请参见Rod Hilton的“ Global Exception Handling ”博客文章。

  • 我目前在我的路由中使用dotry/doCatch块,因此我无法使用全局onException块。 然而,如果驼峰路由中断(由于错误代码或意外/未测试的场景),我希望执行一些业务逻辑。希望这永远不会发生,但我仍然想处理更糟糕的情况。 我不能在全局OneException块中有java.lang.Exception,而且,我不想在每个路由上都添加一个额外的捕获。 在抛出未捕获的异常和中断路由之前,是否

  • 问题内容: 因此,在此桌子上,我一直将头撞在桌子上几个小时,而且我什么都没走,因此我们将不胜感激。 下面的代码有两个jquery事件处理程序,它们会触发ajax请求。第一个使用GET,并且从服务器返回的数据是JSON编码的-它工作正常。返回的第二个(“ button#addTx”)使Firebug产生此错误: 未捕获的异常:[异常…“提示被用户终止” nsresult:“ 0x80040111(N

  • 我正在尝试创建一个过滤器来处理异常(请参见在JSF中处理未捕获的异常) 我在日志中看到错误: 我做错了什么?

  • 问题内容: 如果我在.NET中没有记错的话,可以为未处理的异常注册“全局”处理程序。我想知道Java是否有类似的东西。 问题答案: 是的,有,但只有在没有设置时才会触发。