Swing的JLabel中如何写栈异常?
How to write stack exception in JLabel of Swing?
我必须在标签和日志文件中写入堆栈异常:
try {
...
} catch(Exception e) {
File file = new File(pathFile + "//error.log");
PrintStream ps = new PrintStream(file);
e.printStackTrace(ps);
ps.close();
}
如何在 Swing JLabel
中也写 e
?
我用的是JOptionPane
catch (Exception e) {
java.io.StringWriter sw = new java.io.StringWriter();
java.io.PrintWriter pw = new java.io.PrintWriter(sw);
e.printStackTrace(pw);
String stackTrace = sw.toString();
javax.swing.JTextArea textArea = new javax.swing.JTextArea(stackTrace);
javax.swing.JScrollPane scrollPane = new javax.swing.JScrollPane(textArea);
javax.swing.JOptionPane.showMessageDialog(null,
scrollPane,
e.toString(),
javax.swing.JOptionPane.ERROR_MESSAGE);
}
请注意,调用方法 showMessageDialog
的第一个参数为空,因为您问题中的代码不显示任何 Swing 组件。您应该尝试使用 GUI 中的实际组件而不是 null。
方法 showMessageDialog
的第二个参数是 Object which basically means it can be anything you like. In the above code it is a scroll pane。 JOptionPane
知道如何处理和显示它。
方法 printStackTrace
,在 class java.lang.Throwable
中被重载。上面的代码演示了一种将整个堆栈跟踪作为单个字符串获取的方法。方法 printStackTrace and PrintWriter
constructor and class StringWriter.
参考 javadoc
其实我有一个实用工具class。
public class MessageWindow {
public static void showError(Exception e) {
java.io.StringWriter sw = new java.io.StringWriter();
java.io.PrintWriter pw = new java.io.PrintWriter(sw);
e.printStackTrace(pw);
String stackTrace = sw.toString();
javax.swing.JTextArea textArea = new javax.swing.JTextArea(stackTrace);
javax.swing.JScrollPane scrollPane = new javax.swing.JScrollPane(textArea);
javax.swing.JOptionPane.showMessageDialog(null,
scrollPane,
e.toString(),
javax.swing.JOptionPane.ERROR_MESSAGE);
}
}
然后我只调用 catch
块中的方法。
catch (Exception e) {
MessageWindow.showError(e);
}
我必须在标签和日志文件中写入堆栈异常:
try {
...
} catch(Exception e) {
File file = new File(pathFile + "//error.log");
PrintStream ps = new PrintStream(file);
e.printStackTrace(ps);
ps.close();
}
如何在 Swing JLabel
中也写 e
?
我用的是JOptionPane
catch (Exception e) {
java.io.StringWriter sw = new java.io.StringWriter();
java.io.PrintWriter pw = new java.io.PrintWriter(sw);
e.printStackTrace(pw);
String stackTrace = sw.toString();
javax.swing.JTextArea textArea = new javax.swing.JTextArea(stackTrace);
javax.swing.JScrollPane scrollPane = new javax.swing.JScrollPane(textArea);
javax.swing.JOptionPane.showMessageDialog(null,
scrollPane,
e.toString(),
javax.swing.JOptionPane.ERROR_MESSAGE);
}
请注意,调用方法 showMessageDialog
的第一个参数为空,因为您问题中的代码不显示任何 Swing 组件。您应该尝试使用 GUI 中的实际组件而不是 null。
方法 showMessageDialog
的第二个参数是 Object which basically means it can be anything you like. In the above code it is a scroll pane。 JOptionPane
知道如何处理和显示它。
方法 printStackTrace
,在 class java.lang.Throwable
中被重载。上面的代码演示了一种将整个堆栈跟踪作为单个字符串获取的方法。方法 printStackTrace and PrintWriter
constructor and class StringWriter.
其实我有一个实用工具class。
public class MessageWindow {
public static void showError(Exception e) {
java.io.StringWriter sw = new java.io.StringWriter();
java.io.PrintWriter pw = new java.io.PrintWriter(sw);
e.printStackTrace(pw);
String stackTrace = sw.toString();
javax.swing.JTextArea textArea = new javax.swing.JTextArea(stackTrace);
javax.swing.JScrollPane scrollPane = new javax.swing.JScrollPane(textArea);
javax.swing.JOptionPane.showMessageDialog(null,
scrollPane,
e.toString(),
javax.swing.JOptionPane.ERROR_MESSAGE);
}
}
然后我只调用 catch
块中的方法。
catch (Exception e) {
MessageWindow.showError(e);
}