关于java:堆栈跟踪为String

Stack trace as String

如何在Java中获取完全异常消息?

我正在创建一个Java应用程序。如果存在运行时异常,将弹出带有JTextAreaJDialog。我试图在应用程序中生成运行时异常,但显示异常消息的文本区域如下所示:

1
java.lang.ClassNotFoundException: com.app.Application

但是,我希望我的文本区域显示如下内容:

enter image description here

下面是我的代码中被trycatch包围的部分:

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

我试过使用e.getLocalizedMessage()e.getMessage(),但这两种方法都不管用。


你需要打电话给Throwable#printStackTrace(PrintWriter);

1
2
3
4
5
6
7
8
9
10
11
12
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库,它提供以下功能:

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

exceptionutils getstacktrace()。


要将堆栈跟踪获取到字符串中,可以使用以下行:

1
2
3
4
5
    CharArrayWriter cw = new CharArrayWriter();
    PrintWriter w = new PrintWriter(cw);
    e.printStackTrace(w);
    w.close();
    String trace = cw.toString();


如果您没有使用任何记录器(log4j或Oracle记录器API),那么可以使用下面的语句来打印完整的异常消息。

1
2
3
4
5
6
7
8
9
10
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());
}

如果您使用的是logger API,那么使用下面的语句

1
2
3
4
5
6
7
try{

         // statement which you want to monitor

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


e.printstacktrace将给出完整的堆栈跟踪


1
2
3
4
5
6
7
8
9
10
11
12
13
14
public static String getStackMsg(Throwable e) {
    StringBuffer sb = new StringBuffer();
    sb.append(e.toString()).append("
"
);
    StackTraceElement[] stackArray = e.getStackTrace();

    for(int i = 0; i < stackArray.length; ++i) {
        StackTraceElement element = stackArray[i];
        sb.append(element.toString() +"
"
);
    }

    return sb.toString();
}


这是完整的异常消息。

如果需要更多信息,请尝试e.printstacktrace()。

然后你会得到你所张贴的照片上所看到的一切。


尝试e.printStackTrace(),它将为您的异常打印跟踪,其中提到了行