堆栈跟踪转为字符串

40

如何在Java中获取完整的异常信息?

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

java.lang.ClassNotFoundException: com.app.Application

然而,我希望我的文本区域显示类似以下的内容: enter image description here 这是一些由trycatch包围的代码部分:
String ex = e.toString();
this.addText(ex);

我尝试使用 e.getLocalizedMessage()e.getMessage(),但这两个都无法正常工作。


请查看我提供的更新答案。您可以将跟踪转换为字符串格式以便显示。 - Narendra Pathai
1
使用 ExceptionObject.printStackTrace(); - Vighanesh Gursale
只需要堆栈跟踪转换为字符串部分:https://dev59.com/TnM_5IYBdhLWcg3w9oWG - Ciro Santilli OurBigBook.com
7个回答

88

你需要调用 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()

:获取异常堆栈信息。

太棒了!帮我解决了Android中的InputStream错误 :) - tvieira

6

如果您未使用任何记录器(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());
}

如果您正在使用Logger API,则请使用以下语句。
try{

         // statement which you want to monitor 

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

6
为了将堆栈跟踪转换成字符串,您可以使用以下代码行:
    CharArrayWriter cw = new CharArrayWriter();
    PrintWriter w = new PrintWriter(cw);
    e.printStackTrace(w);
    w.close();
    String trace = cw.toString();

3
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
尝试使用e.printStackTrace(),它将打印出带有行号的异常跟踪信息。

1

这是完整的异常消息。

如果您想获取更多信息,请尝试使用e.printStackTrace()

然后您将获得与您发布的图片完全相同的内容。


1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接