Quiero definir un nivel de aplicación UncaughtExceptionHandler en mi aplicación Java que se invoca si se lanza una excepción no detectada en un hilo de mi aplicación. Sé que es posible definir una excepción no detectada para un grupo de hilos (ThreadGroup) y en realidad la estoy usando, pero quiero definir una excepción global no detectada para hilos que no tienen definido su propio manejador de excepciones no detectadas o que no están asociados a un grupo de subprocesos que tienen definido un manejador de excepción predeterminado.Definir un UncaughtExceptionHandler global para todos los hilos de mi aplicación
Así, por ejemplo, yo quiero llegar a algo como esto:
1° LEVEL ---> Call thread own UncaughtExceptionHandler ---> 2° LEVEL Call Thread Group UncaughtExceptionHandler ---> 3° LEVEL Call application(default) UncaughtExceptionHandler
En términos simples quiero anular el valor predeterminado UncaughtExceptionHandler y definir mi propio controlador en lugar de imprimir el seguimiento de pila en el System.err
(que es el valor predeterminado comportamiento).
Por ejemplo en C# .NET hago algo similar manejar la excepción controlador de eventos no controlada y hilo en el método Main() de la aplicación:
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
se puede hacer incluso en Java?
¿Cómo puedo sobrescribir el UncaughtExceptionHandler predeterminado en Java?
¿Esto es válido para todos los hilos de la aplicación o solo es válido para el hilo actual en el que está definido? ¿Debería definirse en el método principal de la aplicación? – aleroot
Se establece como un campo estático en la clase Thread y no como un campo local de threads. Entonces sería válido para todos los hilos en la aplicación. Se puede definir en el método principal, pero es probable que desee definirlo dentro del bloque 'static' de la clase principal. –
@JohnVint ¿Puedes actualizar la respuesta con el comentario anterior? Para mí fue fácil de entender cuando dijiste que es un campo estático en la clase Thread – Gerrard