2011-01-30 85 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在出現任何特定異常時調試器都會中斷,因此具有非常好的異常斷點處理能力。 – 2011-01-31 17:55:51