Подтвердить что ты не робот

Трассировка стека как строка

Как получить полное сообщение исключения в Java?

Я создаю приложение Java. Если есть исключение во время выполнения, появится сообщение JDialog с JTextArea. Я попытался сделать исключение во время выполнения в своем приложении, но текстовая область, отображающая сообщение об исключении, выглядит следующим образом:

java.lang.ClassNotFoundException: com.app.Application

Однако я хочу, чтобы в моей текстовой области было что-то вроде:

enter image description here

Вот часть моего кода, окруженная try и catch:

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

Я пытался использовать e.getLocalizedMessage() и e.getMessage(), но ни одна из них не работает.

4b9b3361

Ответ 1

Вам нужно вызвать 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();
}

Вы также можете использовать Commons-lang-2.2.jar библиотеку Apache Commons Lang, которая предоставляет эту функциональность:

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

ExceptionUtils # getStackTrace()

Ответ 2

Чтобы получить трассировку стека в строку, вы можете использовать следующие строки:

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

Ответ 3

если вы не используете какой-либо журнал (Log4j или oracle logger api), вы можете использовать оператор ниже для печати полного сообщения об исключении

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

если вы используете API-интерфейс Logger, используйте следующий оператор

try{

         // statement which you want to monitor 

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

Ответ 4

Попробуйте e.printStackTrace(), он будет печатать трассировку для вашего исключения с указанными строками

Ответ 5

e.printStackTrace даст полную трассировку стека

Ответ 6

Это полное сообщение об исключении.

Если вам нужна дополнительная информация, попробуйте e.printStackTrace()

то вы получите удовольствие, что видите на фотографии, которую вы публикуете

Ответ 7

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