数回見たが、それが正しいかどうかまだわからないパターン:Display.syncExecを介してSWTUIスレッドでコードを呼び出す必要があります。UIスレッドで実行されるコードは、チェックされた例外をキャッチし、この例外を待機中のスレッドに伝播したいと考えています。パターンは次のようになります。
SomeCheckedException[] exc = new SomeCheckedException[] { null };
display.syncExec(new Runnable(){
public void run(){
try {
new Work().something();
} catch (SomeCheckedException e){
exc[0] = e;
}
}
});
if (exc[0] != null){
//..
}
ここに実際の同時実行性がない場合でも、これは可視性の観点からは実際には安全ではないと思います。UIスレッドが例外を格納する可能性は十分にありますが、呼び出し元のスレッドはこれを認識せず、「null」を読み取ります。再び制御を取得した後、アレイにアクセスします。私は正しいですか?SWTExceptionをキャッチし、そのスロー可能なフィールドをチェックするのが最善の方法instanceof
ですか?編集:うーん、それがチェックされた例外である場合、それはそれほど簡単には機能しません。自分でcatchブロックからSWTExceptionをスローする必要があります。より良い解決策?
あなたの助けとコメントをありがとう。