我想在我的Java應用程序中定義一個應用程序級別UncaughtExceptionHandler如果在我的應用程序的一個線程中引發未捕獲的異常, 我知道這是可能的定義爲一組線程(ThreadGroup)的未捕獲的異常,我真正使用它,但我想定義線程全球捕獲的異常沒有定義自己未捕獲的異常處理程序或它們與一組具有定義爲的默認異常處理程序的線程無關。爲我的應用程序的所有線程定義一個全局UncaughtExceptionHandler
因此,例如,我想達到這樣的事情:
1° LEVEL ---> Call thread own UncaughtExceptionHandler ---> 2° LEVEL Call Thread Group UncaughtExceptionHandler ---> 3° LEVEL Call application(default) UncaughtExceptionHandler
簡單來說,我想重寫默認的UncaughtExceptionHandler和定義自己的處理程序,而不是打印堆棧跟蹤的System.err
(這是默認行爲)。
例如,在C#.NET我做同樣的處理未處理和線程異常事件處理程序在應用程序的Main()方法的東西:
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
甚至可以用Java來完成?
如何我可以覆蓋默認的UncaughtExceptionHandler在Java中?
這是有效的應用程序的所有線程或者這僅適用於在它被定義當前線程?應該在應用程序的主要方法中定義? – aleroot
它被設置爲Thread類中的靜態字段,而不是線程本地字段。所以它對於應用程序中的所有線程都是有效的。它可以在main方法中定義,但您可能想要在主類的'static'塊中定義它。 –
@JohnVint你可以請用上面的評論更新答案。對於我來說,當你說它是Thread類中的靜態字段時很容易理解 – Gerrard