2010-02-03 21 views
1

對於桌面應用程序,在程序崩潰時查看GUI上的堆棧跟蹤很有用。我通過用我自己的錯誤處理程序替換System.err來實現它,它將所有錯誤消息重定向到GUI組件和文本文件。Java:在GUI中顯示崩潰但禁止警告

問題:出現崩潰時,很多庫(例如Apache POI)不只是寫入System.err,它們還會輸出簡單的警告消息。這會導致崩潰窗口不必要地彈出。所以我的問題是,是否有人知道如何(1)顯示程序崩潰時的堆棧跟蹤,(2)在警告消息的情況下沒有顯示堆棧跟蹤?

[編輯]我的GUI是用SWT編寫的。

回答

2

您可以安裝自己的異常處理程序。這裏解釋一種Swing技術:http://ruben42.wordpress.com/2009/03/30/catching-all-runtime-exceptions-in-swing/。 Eric Burke也有nice article on this topic。另一種通用技術是使用Thread.setDefaultUncaughtExceptionHandler,當線程由於異常而死時調用它(根據第一篇引用文章中的註釋,Swing線程不會死掉,所以設置未捕獲的異常處理程序對Swing不起作用,但是Eric的文章使用了這個技術)。

您的異常處理程序可以顯示錯誤,記錄它或做任何你想做的事,而不用關心使用標準輸出/錯誤流的其他代碼。

2

我認爲你是從錯誤的角度來接近問題。當有異常時,你應該彈出一個對話框,而不是隻有當輸出到System.err時。 System.err更像是一個日誌工具。

對於所有檢查的異常,您應該在代碼中逐個處理它們。要麼彈出一個對話框,記錄它們,要麼忽略它們(但是在這種情況下,請確保它確實是安全的)

要捕獲任何未檢查的異常,可以這樣做:http://www.javaspecialists.eu/archive/Issue081.html確定你得到那些。