2016-05-23 15 views
0

私はExecutorServiceを使用してシステム上でテストを実行しています。問題は何らかの理由でテストが失敗した場合に発生します。これらの理由は数多くあり、もちろん私はこれらのエラーを記録しています。ExecutorServiceタスクによってスローされた例外を処理する方法は?

しかし、私は、リアルタイムで、エラーをユーザーに通知したいと思います。だから、エラーが発生した場合、それが一番上に届く時間は長くなり、メッセージと原因のあるTestFailedExceptionになります。私はこの例外をキャッチしてユーザに通知したいと思いますが、そうすることはできません。

これは、実際にテストを実行するスレッドを起動している方法の一例です:

public void asyncRunTestfixture(Concretetest concretetest) { 

    ExecutorService executor = Executors.newCachedThreadPool(); 
    FutureTask<Boolean> futureTask_1 = new FutureTask<Boolean>(new Callable<Boolean>() { 
     @Override 
     public Boolean call() throws TestFailedException { 
      return RunTestInFixture(concretetest);   
     } 

     }); 
     executor.execute(futureTask_1); 
     executor.shutdown(); 
} 

しかし、呼び出しが例外をスローしていても、私はどちらも現在またはI場合は、他の場所でそれをキャッチすることはできませんasyncRunTestfixtureメソッドが例外をスローしたとします。

どうすればこの問題を解決できますか?完成futureTask_1get()を呼び出す

+1

結果を得るために 'futureTask_1.get()'を呼び出すと、例外がスローされます。 'ExecutionException'の中にラップされます。 –

+0

他のからのこの回答を参照してください(@stackoverflow.com/questions/12305667/how-is-exception-handling-done-in-allable) – Apollo

+0

@ErwinBolwidt、スローされると例外がスローされます。例外はプールワーカースレッドによって_caught_であり、ハンドラは例外オブジェクトへの参照を 'Future'に格納します。最後に、クライアントが将来の 'get()'メソッドを呼び出すと 'ExecutionException'がスローされます。 –

答えて

2

は、タスクは、いくつかの例外をスローしたとき、通常causeを包むExecutionExceptionをスローします。

+0

もちろん、私はその他の場所をしました。ここでそれをやっているとは思っていませんでした。 :)ありがとう!完璧に動作します。 –

関連する問題