在JOptionPane中打印堆栈跟踪

her*_*ian 0 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);
}
Run Code Online (Sandbox Code Playgroud)

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

提前致谢 :)

小智 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)
}
Run Code Online (Sandbox Code Playgroud)

但是,正如前面提到的,你可能想要一个可以滚动的窗口,因为我觉得它不适合JOptionPane.

  • *"我不认为它在'JOptionPane`中非常适合."*如果需要,可以使`JOptionPane`变大.它将使用内容的首选大小作为提示.使用`JTextArea(rows,columns)`构造函数来建议大小.当然,将它包装在`JScrollPane`中.另见[本答案](http://stackoverflow.com/questions/14011492/text-wrap-in-joptionpane/14011536#14011536). (3认同)