Pour les applications de bureau, il est utile de voir la pile sur l'interface graphique lorsque le programme se bloque. J'ai implémenté cela en Java en remplaçant System.err par mon propre gestionnaire d'erreur, qui redirige tous les messages d'erreur vers un composant graphique et un fichier texte. Le problème: Un certain nombre de bibliothèques (par exemple, Apache POI) ne se contentent pas d'écrire dans System.err lorsqu'une panne se produit; elles génèrent également des messages d'avertissement simples. Cela provoque la fenêtre de l'accident à apparaître inutilement. Donc, ma question est, est-ce que quelqu'un sait comment (1) montrer le stacktrace quand le programme se bloque, alors que (2) ne le montre pas en cas de messages d'avertissement? [Modifier] Mon interface graphique est écrite en SWT.Java: Afficher les plantages dans l'interface graphique, mais supprimer les avertissements
Répondre
Vous pouvez installer vos propres gestionnaires d'exceptions. Une technique pour Swing est expliquée ici: http://ruben42.wordpress.com/2009/03/30/catching-all-runtime-exceptions-in-swing/. Eric Burke a également nice article on this topic. Une autre technique générale utilise Thread.setDefaultUncaughtExceptionHandler
, qui est appelée quand les threads meurent en raison d'exception (selon les commentaires du premier article référencé, le thread Swing ne meurt pas, donc le réglage du gestionnaire d'exception non utilisé ne fonctionne pas pour Swing, mais l'article d'Eric utilise ce technique). Votre gestionnaire d'exceptions peut alors afficher l'erreur, l'enregistrer ou faire tout ce que vous voulez, sans se soucier d'autre code en utilisant les flux de sortie/erreur standard.
Je pense que vous abordez le problème sous un mauvais angle. Vous devriez ouvrir une boîte de dialogue quand il y a des exceptions, pas seulement quand il y a une sortie dans System.err. System.err ressemble plus à un utilitaire de journalisation.
Pour toutes les exceptions vérifiées, vous devez les gérer au cas par cas dans votre code. Ouvrez une boîte de dialogue, consignez-les ou ignorez-les (mais dans ce cas, assurez-vous que c'est vraiment sûr)
Pour récupérer toutes les exceptions non contrôlées restantes, vous pouvez faire quelque chose comme ceci: http://www.javaspecialists.eu/archive/Issue081.html, pour faire sûr que vous obtenez ceux-ci.