2011-05-23 128 views
1

(編輯:這個問題是關於BB的具體問題,因爲它優化異常的奇怪方式,我對J2SE中的正常異常處理模式感到滿意,但BB的行爲並不像平時那樣正常。的情況下,BB放棄錯誤類型和消息,以及BB開發人員如何嘗試處理此問題,或者他們忽略它。)BlackBerry - 全局異常處理程序

我想在我的BB應用程序中實現某種形式的自定義全局錯誤處理。特別是要嘗試處理任何其他未被我的代碼捕獲的異常,因爲我沒有預料到它們。默認行爲是應用程序失敗,並彈出一個對話框,說明發生了未知錯誤。

我想描述一點點更好的錯誤,因此我的術語「全局錯誤處理程序」。一些相似的代碼:

public static void main(String[] args) 
{ 
    try 
    { 

     FusionApp app = FusionApp.getInstance(); 
     app.enterEventDispatcher(); 

    } 
    catch (Throwable t) 
    { 
     // t has lost all type information at this point - this prints "null" 
     System.err.println(t.getMessage()); 
    } 
} 

我眼前的問題是,當我趕上t(在main()方法app.enterEventDispatcher()呼叫後),它已經失去了類型信息。例如我知道該代碼會拋出一個帶有自定義消息的IllegalArgumentException - 但是在catch塊中,它是java.lang.Errornull消息。

而在堆棧跟蹤(ALT LGLG)中,消息也已丟失(至少堆棧跟蹤是準確的)。

那麼......用什麼模式來實現某種形式的全局錯誤處理?或者這在這個平臺上被認爲是一個壞主意?

彈出未知錯誤對話框是否被認爲是好的做法 - 我不喜歡這樣,但也許這是BB的方式?

+0

嘿,理查德我是BugSense的聯合創始人。我們專注於移動應用程序的錯誤跟蹤。如果我們聊天的是黑莓平臺,那將是非常棒的。請隨時聯繫我們在我們的網站 – PanosJee 2011-07-08 13:54:57

回答

0

最佳做法是實現自定義異常處理。

所以,如果你希望趕上拋出:IllegalArgumentException,MyCustomException和StartupException,把它們放到catch塊,再放入異常俘獲(然後,如果你喜歡,把Throwable的捕撈)

的共同規則從最排斥到最常見,以及同一級別的例外 - 從最期望到最不可預期。

如果發生異常== null或getMessage()== null,您總是可以顯示「應用程序錯誤,請將事件日誌發送給[支持電子郵件]」消息,然後如果您有一個很好的事件登錄應用程序,你有很好的機會重現一個問題。

而在談論事件日誌時,請參見EventLogger類來實現日誌記錄。

+0

謝謝,這是很好的信息。不過,我想了解一下BB的具體解決方案,以瞭解其他BB開發人員在這種情況下所做的工作。我已經編輯了一些問題,更具體一點,我想有一些try..catch塊在整個應用程序來處理意外的異常,如空指針,非法參數等,並以一種很好的方式處理它們用戶。 – 2011-05-25 06:06:47