40 votes

Java : Gestionnaire d'exception global

Existe-t-il un moyen de créer un gestionnaire d'exception global en Java ? Je veux l'utiliser comme ceci :

"When an exception is thrown somewhere in the WHOLE program, exit."

Le gestionnaire ne peut pas attraper les exceptions lancées dans un try-catch corps.

Martijn

58voto

bobbymcr Points 14916

Utilice Thread.setDefaultUncaughtExceptionHandler . Voir l'article de Rod Hilton " Gestion globale des exceptions "pour un exemple.

4voto

Kolibri Points 437

Vous pouvez définir le UncaughtExceptionHandler par défaut qui sera utilisée chaque fois qu'une exception se produira dans le système sans avoir été capturée.

3voto

Brad Mace Points 12173

Voici un exemple qui utilise Retour à la case départ pour gérer les éventuelles exceptions non capturées :

Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
    public void uncaughtException(Thread t, Throwable e) {
        LoggerFactory.getLogger("CustomLogger").error("Uncaught Exception in thread '" + t.getName() + "'", e);
        System.exit(1);
    }
});

Cette opération peut également être effectuée pour chaque thread à l'aide de la fonction Thread.setUncaughtExceptionHandler(Thread.UncaughtExceptionHandler)

2voto

Clifford Oravec Points 44

Pour plus de clarté, utilisez setDefaultUncaughtExceptionHandler pour les applications Java autonomes ou pour les cas où vous êtes sûr d'avoir un point d'entrée bien défini pour le Thread.

Dans les cas où vous ne disposez pas d'un point d'entrée bien défini pour le Thread, par exemple lorsque vous travaillez dans un contexte de serveur web ou de serveur d'application ou dans un autre cadre où l'installation et la désinstallation sont gérées en dehors de votre code, regardez comment ce cadre gère les exceptions globales. Généralement, ces frameworks disposent de leurs propres gestionnaires d'exceptions globales, auxquels vous participez plutôt que de les définir.

Pour une discussion plus approfondie, voir http://metatations.com/2011/11/20/global-exception-handling-in-java/

0voto

Hypercube Points 267

DefaultUncaughtExceptionHandler est la bonne réponse. Elle m'a été révélée par Jeff Storey à cette il y a quelques jours. Comme nous le soupçonnions, les exceptions capturées "manuellement" ne seront jamais capturées par ce gestionnaire. Cependant, j'ai reçu l'avertissement suivant :

**- Pour être conforme à J2EE, une application web ne doit pas utiliser de thread.**

lorsque j'ai vérifié mon projet par rapport aux bonnes pratiques et au style de codage recommandé en java avec PMD plug-in pour Eclipse IDE.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X