7

我的部分代码抛出 java.util.concurrent.ExecutionException 异常。我该如何处理?我可以使用 throws 子句吗?我对java有点陌生。

4

3 回答 3

15

这取决于您Future对如何处理它的关键任务。事实是你不应该得到一个。如果在您的代码中执行的Future未处理的代码抛出了某些东西,您只会收到此异常。

当你catch(ExecutionException e)应该能够使用e.getCause()来确定你的Future.

理想情况下,您的异常不会像这样浮出水面,而是直接在您的Future.

于 2012-07-25T18:31:00.673 回答
5

您应该调查并处理您的 ExecutionException 的原因。

在“Java Concurrency in Action”一书中描述的一种可能性是创建launderThrowable负责展开泛型的方法ExecutionExceptions

void launderThrowable ( final Throwable ex )
{
    if ( ex instanceof ExecutionException )
    {
        Throwable cause = ex.getCause( );

        if ( cause instanceof RuntimeException )
        {
            // Do not handle RuntimeExceptions
            throw cause;
        }

        if ( cause instanceof MyException )
        {
            // Intelligent handling of MyException
        }

        ...
    }

    ...
}
于 2012-07-25T18:28:11.703 回答
2

如果你想处理异常,事情就很简单了。

   public void exceptionFix1() {
       try {
           //code that throws the exception
       } catch (ExecutionException e) {
           //what to do when it throws the exception
       }
   }

   public void exceptionFix2() throws ExecutionException {
       //code that throws the exception
   }

请记住,第二个示例必须包含在try-catch执行层次结构上方的某个块中。

如果您正在寻找修复异常,我们将不得不查看更多您的代码。

于 2012-07-25T18:30:25.813 回答