java - 如何访问作为线程的一部分发生的异常信息?

标签 java multithreading exception

<分区>

Possible Duplicate:
What is the best approach to handling exceptions thrown in a separate thread?

当坏事发生时,我的代码会抛出一个异常,该异常稍后会被捕获和处理。

但是,如果所述代码作为线程的一部分运行,public void run() 不会throw Exception。胎面的执行者如何知道抛出的异常?

现在:

 A a = new A();
 try {
    a.doSomething();
 } catch (Exception e) {
    // do something clever
 }

有线程

 Thread t = new Thread (new A());
 t.start(); // run() calls doSomething()

如果这个线程因异常而失败,我怎么知道呢?

最佳答案

您可以通过 Thread.setUncaughtExceptionHandler() 在线程上设置未捕获的异常处理程序,它将处理您的代码中未处理的任何异常。

本质上:

t.setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
  public void uncaughtException(Thread t, Throwable e)() {
    // do whatever
  }
});

此外,如果您想要所有线程的处理程序,您可以调用 Thread.setDefaultUncaughtExceptionHandler这是一种静态方法,用于在没有专门的线程处理程序时为线程提供处理程序。

关于java - 如何访问作为线程的一部分发生的异常信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8806167/

相关文章:

java - Jersey 中的自定义 ValidationError 类仅发送错误的字符串消息

java - 如何获取单选按钮的 ID 并转换为字符串?

Java GUI Windows 经典

java - Junit 测试 @InjectMocks 类中的异常

java - 可以抛出运行时异常?

java - 为什么对象类中只有 clone 和 finalize 是 protected 方法?

java - Java-多线程中getId的内部操作是什么?

Python无法启动新线程多处理

c# - 参数化线程,理解lambda表达式

java - 如何识别哪个字段导致异常