Определение одного глобального UncaughtExceptionHandler для всех потоков моего приложения

Я хочу определить один UncaughtExceptionHandler уровня приложения в моем приложении Java, который вызывается, если не пойманное исключение брошено в одном потоке моего приложения. Я знаю, что можно определить не пойманное исключение для группы потоков (ThreadGroup) и я фактически использую это, но я хочу определить глобальное не пойманное исключение для потоков, которые не определили свой собственный обработчик не пойманных исключений или которые не связаны с группой потоков, у которых определен обработчик исключений по умолчанию.

Например, я хочу достичь чего-то подобного:

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 ?

13
задан aleroot 2 December 2011 в 20:43
поделиться