窗口

2011-08-29 59 views
0

奇怪的畫我們看到奇怪的繪畫行爲時,未捕獲的異常的擺動監聽器是這樣的:窗口

mytable.getSelectionModel().addListSelectionListener(
     new ListSelectionListener() { 
      @Override 
      public void valueChanged(ListSelectionEvent e) { 
       ... no try catch and npe exception happens 
      } 
     }); 

是因爲我們在揮杆拋中斷正常的油漆/更新?在拋出的窗口中,我們開始在奇怪的地方看到按鈕,滾動條出現多次。如果是的話該怎麼辦?嘗試/抓住每個搖擺聽衆?

回答

1

奇怪的繪畫的原因確實是聆聽者拋出的異常。解決方案是避免偵聽器中的異常。但是,將每個偵聽器代碼嵌入到try/catch塊中並不是解決方案。解決方案是避免錯誤,並在出現時加以修復。奇怪的繪畫,以及異常的堆棧跟蹤,可以讓您檢測何時在偵聽器代碼中存在錯誤。 NullPointerException絕不應該發生。如果它發生,你有一個錯誤。捕捉異常併吞下它只會使錯誤變得更糟,因爲它不會被檢測到,並且會導致向用戶顯示錯誤的信息,這可能會根據這些錯誤信息做出災難性的操作。

+0

真的嗎?解決方案從來沒有錯誤? – Colin

+1

錯誤的解決方案是修復錯誤。您可以*隱藏*錯誤,但可能會導致其他錯誤,更難以發現以及後來更糟糕的錯誤。比方說,如果某些醫學檢查發現癌症,您需要展示一個大的紅色標籤。假設您在顯示大紅色閃爍標籤的行之前有一個錯誤。你願意直接注意到這個錯誤並修復它嗎?或者你更喜歡隱藏錯誤,因此從不顯示大的紅色閃爍標籤,導致病人死亡,因爲癌症沒有被發現? –

0

默認情況下,Swing在處理意外異常方面做得並不十分出色。正如你猜測的那樣,Swing在你的特定情況下顯然沒有清醒地恢復過來。

鑑於發生錯誤,我更願意提供一個異常處理程序,它向用戶顯示一個對話框。理想情況下,該對話框會有一個「Report Bug」按鈕,允許用戶通過電子郵件將堆棧跟蹤郵件發回給您,以便您可以解決問題。該對話框還應允許用戶忽略問題並繼續。當對話框關閉時,您應該正常返回,這會使AWT事件隊列不受影響。

這種類型的對話框不僅適用於您的用戶,也適用於任何使用該代碼的人。開發人員會比用戶更頻繁地遇到崩潰,開發人員可以選擇調查崩潰或忽略它的對話框非常有幫助。

見介紹如何建立一個異常處理此相關的主題:

How can I catch AWT thread exceptions in Java?