2013-08-31 14 views
30

Jak uzyskać pełny komunikat wyjątku w języku Java?Stos śledzenia jako ciąg

Tworzę aplikację Java. Jeśli istnieje wyjątek środowiska wykonawczego, pojawi się JDialog z JTextArea. Starałem się uczynić wyjątek czasu wykonywania w mojej aplikacji, ale obszar ten tekst pokazujący komunikat wyjątku wygląda następująco:

java.lang.ClassNotFoundException: com.app.Application 

Jednakże chcę moje pole tekstowe, aby zobaczyć coś takiego:

enter image description here

Oto niektóre części mojego kodu otoczony try i catch:

String ex = e.toString(); 
this.addText(ex); 

Próbowałam użyj e.getLocalizedMessage() i e.getMessage(), ale żadna z nich nie działa.

+0

sprawdzić zaktualizowaną odpowiedź, że mam do tego celu. Można uzyskać konwertowane śledzenie na format ciągów do wyświetlenia. –

+1

użyj 'ExceptionObject.printStackTrace();' –

+0

Tylko ślad stosu do części string: http://stackoverflow.com/questions/1149703/how-can-i-convert-a-stack-trace-to-a-string –

Odpowiedz

68

Trzeba wezwać 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(); 
} 

Można również użyć commons-lang-2.2.jar biblioteki Apache Commons Lang, który zapewnia tę funkcję:

public static String getStackTrace(Throwable throwable) 
Gets the stack trace from a Throwable as a String. 

ExceptionUtils#getStackTrace()

+0

Działa !!! Dzięki za zaawansowane – Jeremy

+0

Awesome! Pomógł mi w błędzie InputStream w systemie Android :) – tvieira

1

Try e.printStackTrace(), wydrukuje ślad dla wyjątku z liniami wymienionymi

0

To jest pełna wiadomość wyjątku.

Jeśli chcesz więcej informacji spróbować w.printStackTrace()

wtedy dostaniesz excatly co widać na zdjęciu ty postet

3

jeśli nie używasz żadnego rejestratora (Log4j lub oracle rejestrator API) następnie można skorzystać z poniższej instrukcji, aby wydrukować pełną wiadomość wyjątkiem

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()); 
} 

jeśli używasz API Logger a następnie użyć poniższego wyrażenia

try{ 

     // statement which you want to monitor 

}catch(Exception e){ 
    log.error(e,e); 
} 
4

aby uzyskać ślad stosu na ciąg znaków można użyć następujących linii:

CharArrayWriter cw = new CharArrayWriter(); 
    PrintWriter w = new PrintWriter(cw); 
    e.printStackTrace(w); 
    w.close(); 
    String trace = cw.toString(); 
+0

Twój kod nie działa ... – Jeremy

+0

Masz rację, zobacz aktualizację. – Henry

+0

dziękuję, to też działa – Jeremy

0
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(); 
} 
Powiązane problemy