在JOptionPane中打印堆栈跟踪

时间:2013-01-20 02:48:34

标签: java printing error-handling stack-trace joptionpane

我的问题: 如何将文本e.printStackTrace打印到JOptionPane窗口

我的代码目前如下:
原谅糟糕的格式:P

try {
  //SOME CODE
} catch (Exception e) {
  e.printStackTrace();
  JOptionPane.showMessageDialog(null,
     "An unexpected error has occurred:\n" + e.getMessage() + '\n' + Thread.currentThread().getStackTrace() +  "\nPlease send this error to ." + email + "\nThanks for your help.",
     "Error", JOptionPane.ERROR_MESSAGE);
}

这两者都在命令行界面打印堆栈跟踪(我正在使用终端),它创建了一个JOptionPane但没有与e.printStackTrace()相同的信息。当从jar文件运行我的程序时,命令行界面将不可见,因此用户将只获得JOptionPane窗口,该窗口没有我成功识别问题所需的所有信息

提前致谢:)

1 个答案:

答案 0 :(得分:6)

在这里,这只是我提出的一些通用代码,它将为您提供与e.printStackTrace()相同的输出。

try {
    // some code
} catch (Exception e) {
    StringBuilder sb = new StringBuilder(e.toString());
    for (StackTraceElement ste : e.getStackTrace()) {
        sb.append("\n\tat ");
        sb.append(ste);
    }
    String trace = sb.toString();
    // Now, trace contains the stack trace
    // (However, you can only use it inside the catch block)
}

但是,如前所述,您可能需要一个可以滚动的窗口,因为我认为它不适合JOptionPane