Java: Afficher les accidents dans l'interface graphique, mais supprimer les avertissements

StackOverflow https://stackoverflow.com/questions/2190650

  •  25-09-2019
  •  | 
  •  

Question

Pour les applications de bureau, il est utile de voir le stacktrace sur l'interface graphique lorsque le programme se bloque de. Je mis en œuvre ce en Java en remplaçant System.err avec mon propre gestionnaire d'erreur, qui redirige tous les messages d'erreur à un composant graphique et un fichier texte.

Le problème: Tout à fait quelques bibliothèques là-bas (par exemple Apache POI) ne se contentent pas d'écrire à System.err quand un accident se produit, ils messages d'avertissement simples également sortie. Cela provoque la fenêtre de collision pour faire apparaître inutilement. Donc, ma question est, quelqu'un sait comment (1) montrent la stacktrace lorsque le programme se bloque, alors que (2) ne montre pas en cas de messages d'avertissement?

[Modifier] Mon GUI est écrit dans SWT.

Était-ce utile?

La solution

Vous pouvez installer propres gestionnaires d'exception. Une technique pour Swing est expliqué ici: http : //ruben42.wordpress.com/2009/03/30/catching-all-runtime-exceptions-in-swing/ . Eric Burke a aussi bel article sur ce sujet . Une autre technique générale utilise Thread.setDefaultUncaughtExceptionHandler , qui est appelée lorsque le fil meurt en raison d'exception (selon les commentaires dans le premier article référencé, fil Swing ne meurt pas, la mise en sorte gestionnaire d'exceptions uncaught ne fonctionne pas pour Swing , mais l'article d'Eric utilise cette technique).

Votre gestionnaire d'exceptions peut alors l'erreur d'affichage, connectez-vous, ou faire tout ce que vous voulez, sans se soucier de tout autre code utilisant des flux sur la sortie standard / erreur.

Autres conseils

Je pense que vous vous approchez le problème du mauvais angle. Vous devriez popping une boîte de dialogue quand il y a des exceptions, et pas seulement quand il y a sortie System.err. System.err est plus comme un utilitaire de journalisation.

Pour toutes les exceptions vérifiées, vous devez les traiter au cas par cas dans votre code. Soit apparaître une boîte de dialogue, les enregistrer ou les ignorer (mais dans ce cas, assurez-vous qu'il est vraiment sûr de le faire)

Pour attraper toutes les exceptions non vérifiées restantes, vous pouvez faire quelque chose comme ceci: http: // www .javaspecialists.eu / archive / Issue081.html , pour vous assurer que vous obtenez les.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top