私は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_1
にget()
を呼び出す
結果を得るために 'futureTask_1.get()'を呼び出すと、例外がスローされます。 'ExecutionException'の中にラップされます。 –
他のからのこの回答を参照してください(@stackoverflow.com/questions/12305667/how-is-exception-handling-done-in-allable) – Apollo
@ErwinBolwidt、スローされると例外がスローされます。例外はプールワーカースレッドによって_caught_であり、ハンドラは例外オブジェクトへの参照を 'Future'に格納します。最後に、クライアントが将来の 'get()'メソッドを呼び出すと 'ExecutionException'がスローされます。 –