Dans ma base de code est le (très simplifié) suivant:Comment empêcher les flux sysout et syserr de se mélanger?
public static void main (String[] args) {
System.out.println("Starting application");
try {
System.out.println("About to validate");
validate(args);
catch (Exception e) {
e.printStackTrace();
}
}
public static void validate(String[] args) {
System.out.println("Your first arg is " + args[0]);
if (someProblemWith(args)) {
System.out.println("Your args are wrong. It should be: ...");
throw new BadArgsException(e);
}
}
Ce qui fonctionne très bien. Notez que mon exemple de code ci-dessus est artificiel et simplement destiné à afficher plusieurs instructions de journal avant l'exception et l'impression de trace de pile. Cela signifie souvent que ma dernière instruction de journalisation est perdue au milieu de la sortie de la trace de la pile. Existe-t-il une manière élégante de demander à l'instruction e.printStackTrace()
d'attendre jusqu'à ce que System.out ait terminé son travail? Je cherche essentiellement le stacktrace à être la dernière chose imprimée quand une erreur se produit. Voici un exemple de sortie de mon programme ci-dessus:
java.lang.Throwable
....
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
Your args are wrong. It should be: ...
at java.lang.reflect.Method.invoke(Method.java:597)
at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:56)
OMG! Vous avez traversé les cours d'eau! Inversion protonique totale! –