Voglio definire un livello applicazione UncaughtExceptionHandler nella mia applicazione Java che viene chiamata se un'eccezione non rilevata viene generata in un thread della mia applicazione. So che è possibile definire un'eccezione non rilevata per un gruppo di thread (ThreadGroup) e lo sto effettivamente utilizzando, ma voglio definire un'eccezione non rilevata globale per i thread che non hanno definito il proprio gestore di eccezioni non rilevati o che non sono associati a un gruppo di thread con un gestore di eccezioni predefinito definito.Definizione di un UncaughtExceptionHandler globale per tutti i thread della mia applicazione
Così, per esempio, voglio raggiungere qualcosa di simile:
1° LEVEL ---> Call thread own UncaughtExceptionHandler ---> 2° LEVEL Call Thread Group UncaughtExceptionHandler ---> 3° LEVEL Call application(default) UncaughtExceptionHandler
In termini semplici voglio ignorare l'impostazione predefinita UncaughtExceptionHandler e definire il mio gestore, invece di stampare l'analisi dello stack sul System.err
(che è il default comportamento).
Per esempio in C# .NET faccio qualcosa di simile movimentazione eccezione gestore di eventi non gestita e thread nel metodo Main() dell'applicazione:
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
può essere fatto anche in Java?
Come è possibile eseguire l'override di UncaughtExceptionHandler predefinito in Java?
È valido per tutti i thread dell'applicazione o è valido solo per il thread corrente in cui è definito? Dovrebbe essere definito nel metodo principale dell'applicazione? – aleroot
È impostato come campo statico nella classe Thread e non come campo locale del thread. Quindi sarebbe valido per tutti i thread nell'applicazione. Può essere definito nel metodo principale, ma probabilmente lo si vorrebbe definire all'interno del blocco 'static' della classe principale. –
@JohnVint Potete aggiornare la risposta con il commento sopra. Per me è stato facile capire quando hai detto che è un campo statico nella classe Thread – Gerrard