web-dev-qa-db-fra.com

Trace de pile en tant que chaîne

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:

enter image description here

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.

32
Jeremy

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.

ExceptionUtils # getStackTrace ()

78
Narendra Pathai

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); 
}
5
Rakesh Soni

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();
5
Henry

e.printStackTrace donnera la trace complète de la pile

2
Siva

Essayez e.printStackTrace(), il imprimera la trace de votre exception avec les lignes mentionnées

1
Onur A.

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

1
Philipp Sander
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();
}
1
Jiawei Yang