2011-01-30 9 views
6

あなたが知っているかもしれませんが、標準SWTメインループは次のようになります。最近Java SWT:例外ハンドラでメインループをラップしますか?

Display display = new Display(); 
Shell shell = new Shell(display); 
... 
shell.open(); 
while (!shell.isDisposed()) { 
    if (!display.readAndDispatch()) { 
    display.sleep(); 
    } 
} 
display.dispose(); 

、私は同じように、それはのtry-catchでメインループをラップするために理にかなっているかどうかについて同僚と口論していましたそう:

Display display = new Display(); 
Shell shell = new Shell(display); 
... 
shell.open(); 
while (!shell.isDisposed()) { 
    try { 
    if (!display.readAndDispatch()) { 
     display.sleep(); 
    } 
    } catch (RuntimeException e) { 
    // TODO Implement exception handler 
    } 
} 
display.dispose(); 

私の同僚はそれを使用すると、GUIのスレッドでクラッシュが発生した場合には、それゆえ、ユーザーが閉じる前に、自分のデータを保存する機会を持つことが、すぐにアプリケーションをシャットダウンする必要はありません。この方法をやって言いますプログラム。

あなたはどう思いますか?そんなことをするのは理にかなっていますか?

答えて

6

GUIコードで例外が発生する可能性があるため、非常に優れたスタイルです。私たちは、この場所に一般的なBugReportの送信者があります。何も失われないので、私はそれを大好きです、そして、バグレポートの後で(ほとんど;)アプリケーションが動作し続けます)。

+0

はい、確かに非常に良いスタイルですが、空の例外のキャッチは非常に非常に悪いことに注意してください。例外が失われ、デバッグが悪夢になるからです。私はあなたが本当にどこにキャッチを実装しようとしていると仮定します。この種のコードをデバッグする必要がある場合、Eclipseは非常に優れた例外ブレークポイント処理を備えており、デバッガは特定の例外でブレークします。 –

+1

私が言ったように...私はExceptionを処理し、それを記録して、私たちのissuetrackerに例外のためにsemiautomated(ユーザは "ok"をクリックしなければならない)レポートを送信します。 – Daniel

関連する問題