4

代码:

    outerMethod {
        @Override
        public void run() {
                innerMethod throws IOException
                }
    }

在线程中执行的方法抛出检查异常 - IOException。我需要在主线程中处理这个异常。喜欢:

outerMethod() throws IOException
   {
        @Override
        public void run() {
                innerMethod() throws IOException
                }
    }

这可能吗?如果没有,有什么更好的方法来做到这一点?

谢谢。

4

4 回答 4

5

使用 FutureTask http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/FutureTask.html#get%28%29。它的 get 方法将封装可能在另一个线程上运行的任务的任何异常。

ExecutionException:尝试检索因抛出异常而中止的任务的结果时抛出的异常。可以使用 Throwable.getCause() 方法检查此异常。

于 2012-06-27T07:10:52.860 回答
3

线程是一个单独的进程,您不能将您的异常传播到其他线程,因为它们无法通过异常路由进行对话。但是,您可以使用线程间通信,并且您必须在发生异常时从逻辑上处理这种情况。

于 2012-06-27T07:07:06.373 回答
3

从此API 文档

如果线程定义了UncaughtExceptionHandler,则调用,否则调用线程组的UncaughtExceptionHandler,否则可以转发给默认的未捕获异常处理程序。

于 2012-06-27T07:36:45.480 回答
0

您必须在 run 方法中处理异常:

        @Override
        public void run() {
           try {
              innerMethod();
           } catch (Exception e) {
             //handle e
           }
于 2012-06-27T07:10:17.637 回答