Comment obtenir un message d'exception complet en Java?
Je crée une application Java. S'il existe une exception d'exécution, une JDialog
avec une JTextArea
apparaîtra. J'ai essayé de créer une exception d'exécution dans mon application, mais la zone de texte contenant le message d'exception ressemble à ceci:
Java.lang.ClassNotFoundException: com.app.Application
Cependant, je veux que ma zone de texte affiche quelque chose comme:
Voici une partie de mon code entourée de try
et catch
:
String ex = e.toString();
this.addText(ex);
J'ai essayé d'utiliser e.getLocalizedMessage()
et e.getMessage()
, mais cela ne fonctionne pas.
Vous devez appeler la Throwable#printStackTrace(PrintWriter);
try{
}catch(Exception ex){
String message = getStackTrace(ex);
}
public static String getStackTrace(final Throwable throwable) {
final StringWriter sw = new StringWriter();
final PrintWriter pw = new PrintWriter(sw, true);
throwable.printStackTrace(pw);
return sw.getBuffer().toString();
}
Vous pouvez également utiliser commons-lang-2.2.jar la bibliothèque Apache Commons Lang qui fournit cette fonctionnalité:
public static String getStackTrace(Throwable throwable)
Gets the stack trace from a Throwable as a String.
si vous n'utilisez aucun enregistreur (log4j ou Oracle logger api), vous pouvez utiliser l'instruction ci-dessous pour imprimer le message d'exception complet
try{
// statement which you want to monitor
}catch(Exception e){
e.printStackTrace()
// OR System.err.println(e.getStackTrace());
// OR System.err.println(e);
// OR System.err.println(e.getMessage());
// OR System.err.println(e.getCause());
}
si vous utilisez l'API Logger, utilisez l'instruction ci-dessous.
try{
// statement which you want to monitor
}catch(Exception e){
log.error(e,e);
}
Pour obtenir la trace de la pile dans une chaîne, vous pouvez utiliser ces lignes:
CharArrayWriter cw = new CharArrayWriter();
PrintWriter w = new PrintWriter(cw);
e.printStackTrace(w);
w.close();
String trace = cw.toString();
e.printStackTrace donnera la trace complète de la pile
Essayez e.printStackTrace()
, il imprimera la trace de votre exception avec les lignes mentionnées
C'est le message d'exception complet.
Si vous voulez plus d'informations essayez e.printStackTrace ()
alors vous obtiendrez excatly ce que vous voyez sur la photo que vous postet
public static String getStackMsg(Throwable e) {
StringBuffer sb = new StringBuffer();
sb.append(e.toString()).append("\n");
StackTraceElement[] stackArray = e.getStackTrace();
for(int i = 0; i < stackArray.length; ++i) {
StackTraceElement element = stackArray[i];
sb.append(element.toString() + "\n");
}
return sb.toString();
}