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の原因を調査して処理する必要があります。

「JavaConcurrencyinAction」の本で説明されている1つの可能性は、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-catch2番目の例は、実行階層の上のどこかのブロックで囲む必要があることに注意してください。

例外を修正する場合は、コードをさらに確認する必要があります。

于 2012-07-25T18:30:25.813 に答える