代码:
outerMethod {
@Override
public void run() {
innerMethod throws IOException
}
}
在线程中抛出的方法抛出已检查的异常 - IOException。 我需要在主线程中处理此异常。 喜欢:
outerMethod() throws IOException
{
@Override
public void run() {
innerMethod() throws IOException
}
}
这可能吗?如果不是,那么更好的方法是什么?
感谢。
答案 0 :(得分:5)
使用FutureTask http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/FutureTask.html#get%28%29。它的get方法将封装可能在另一个线程上运行的任务的任何异常。
ExecutionException:尝试检索通过抛出异常而中止的任务的结果时抛出异常。可以使用Throwable.getCause()方法检查此异常。
答案 1 :(得分:3)
线程是一个单独的进程,您无法将异常传播到其他线程,因为它们无法通过异常路由进行通信。但是,您可以使用线程间通信,并且在发生异常时必须以逻辑方式处理该情况。
答案 2 :(得分:3)
如果线程已经定义了UncaughtExceptionHandler,它将被调用, 如果已定义,将调用其他线程组的UncaughtExceptionHandler, 否则它可以转发到默认的未捕获异常处理程序。
答案 3 :(得分:0)
您必须在run方法中处理异常:
@Override
public void run() {
try {
innerMethod();
} catch (Exception e) {
//handle e
}