📄 errordialog.java
字号:
* Prints detailed stack trace to the given buffer.
* @param t exception instance, may be <code>null</code>
* @param header stack trace caption
* @param sb output text buffer
*/
public static void printError(final Throwable t, final String header,
final StringBuffer sb) {
if (t == null) {
return;
}
String nl = System.getProperty("line.separator"); //$NON-NLS-1$
sb.append(nl).append(header).append(nl).append(nl);
StackTraceElement[] stackTrace = t.getStackTrace();
for (int i = 0; i < stackTrace.length; i++) {
sb.append(stackTrace[i].toString()).append(nl);
}
Throwable next = t.getCause();
printError(next, "Caused by " + next, sb); //$NON-NLS-1$
if (t instanceof SQLException) {
// Handle SQLException specifically.
next = ((SQLException) t).getNextException();
printError(next, "Next exception: " + next, sb); //$NON-NLS-1$
} else if (t instanceof InvocationTargetException) {
// Handle InvocationTargetException specifically.
next = ((InvocationTargetException) t).getTargetException();
printError(next, "Target exception: " + next, sb); //$NON-NLS-1$
}
}
private javax.swing.JPanel jContentPane = null;
private JPanel jPanel = null;
private JLabel messageLabel = null;
private JLabel errorLabel = null;
private JPanel jPanel1 = null;
private JButton closeButton = null;
private JScrollPane jScrollPane = null;
JTextArea jTextArea = null;
private JTabbedPane jTabbedPane = null;
private JPanel jPanelInfo = null;
private JScrollPane jScrollPane2 = null;
private JList jList = null;
private JLabel dataLabel = null;
boolean yesBtnPressed = false;
private JButton yesButton = null;
private ErrorDialog(final Frame owner, final String title, final String message,
final Object data, final Throwable t, boolean yesNo) {
super((owner != null) ? owner : JOptionPane.getRootFrame());
initialize();
setLocationRelativeTo(getOwner());
jTabbedPane.setTitleAt(0, ResourceManager.getMessage(Boot.PACKAGE_NAME,
"infoTabLabel")); //$NON-NLS-1$
jTabbedPane.setTitleAt(1, ResourceManager.getMessage(Boot.PACKAGE_NAME,
"detailsTabLabel")); //$NON-NLS-1$
setTitle(title);
messageLabel.setText(message);
if (t != null) {
errorLabel.setText(ResourceManager.getMessage(Boot.PACKAGE_NAME,
"errorLabel", t)); //$NON-NLS-1$
} else {
getJPanel().remove(errorLabel);
}
if (data instanceof Collection) {
DefaultListModel model = new DefaultListModel();
for (Iterator it = ((Collection) data).iterator(); it.hasNext();) {
model.addElement(it.next());
}
jList.setModel(model);
getJPanel().remove(dataLabel);
} else if (data instanceof Object[]) {
DefaultListModel model = new DefaultListModel();
for (int i = 0; i < ((Object[]) data).length; i++) {
model.addElement(((Object[]) data)[i]);
}
jList.setModel(model);
getJPanel().remove(dataLabel);
} else if (data != null) {
dataLabel.setText(data.toString());
getJPanelInfo().remove(getJScrollPane());
} else {
getJPanel().remove(dataLabel);
getJPanelInfo().remove(getJScrollPane());
}
jTextArea.setText(getErrorDetails(t));
jTextArea.setCaretPosition(0);
if (yesNo) {
closeButton.setText(ResourceManager.getMessage(Boot.PACKAGE_NAME,
"noLabel")); //$NON-NLS-1$
yesButton.setText(ResourceManager.getMessage(Boot.PACKAGE_NAME,
"yesLabel")); //$NON-NLS-1$
} else {
getJPanel1().remove(yesButton);
closeButton.setText(ResourceManager.getMessage(Boot.PACKAGE_NAME,
"closeLabel")); //$NON-NLS-1$
}
}
private void initialize() {
this.setDefaultCloseOperation(
javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
this.setModal(true);
this.setTitle("An error has occurred"); //$NON-NLS-1$
this.setSize(460, 280);
this.setContentPane(getJContentPane());
getRootPane().setWindowDecorationStyle(JRootPane.ERROR_DIALOG);
getRootPane().setDefaultButton(closeButton);
getRootPane().getInputMap(
JComponent.WHEN_IN_FOCUSED_WINDOW).put(
KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0),
"doCloseDefault"); //$NON-NLS-1$
getRootPane().getActionMap().put("doCloseDefault", //$NON-NLS-1$
new AbstractAction() {
private static final long serialVersionUID = -9167454634726502084L;
public void actionPerformed(final ActionEvent evt) {
dispose();
}
});
getRootPane().setDefaultButton(getCloseButton());
}
private javax.swing.JPanel getJContentPane() {
if (jContentPane == null) {
BorderLayout borderLayout2 = new BorderLayout();
jContentPane = new javax.swing.JPanel();
jContentPane.setLayout(borderLayout2);
borderLayout2.setVgap(2);
jContentPane.add(getJPanel1(), java.awt.BorderLayout.SOUTH);
jContentPane.add(getJTabbedPane(), java.awt.BorderLayout.CENTER);
}
return jContentPane;
}
private JPanel getJPanel() {
if (jPanel == null) {
dataLabel = new JLabel();
dataLabel.setText("JLabel"); //$NON-NLS-1$
errorLabel = new JLabel();
messageLabel = new JLabel();
jPanel = new JPanel();
jPanel.setLayout(new BoxLayout(getJPanel(), BoxLayout.Y_AXIS));
messageLabel.setText("JLabel"); //$NON-NLS-1$
errorLabel.setText("JLabel"); //$NON-NLS-1$
jPanel.add(messageLabel, null);
jPanel.add(errorLabel, null);
jPanel.add(dataLabel, null);
}
return jPanel;
}
private JPanel getJPanel1() {
if (jPanel1 == null) {
FlowLayout flowLayout = new FlowLayout();
flowLayout.setAlignment(java.awt.FlowLayout.RIGHT);
jPanel1 = new JPanel();
jPanel1.setLayout(flowLayout);
jPanel1.add(getYesButton(), null);
jPanel1.add(getCloseButton(), null);
}
return jPanel1;
}
private JButton getCloseButton() {
if (closeButton == null) {
closeButton = new JButton();
closeButton.setText("Close"); //$NON-NLS-1$
closeButton.setSelected(true);
closeButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
dispose();
}
});
}
return closeButton;
}
private JScrollPane getJScrollPane() {
if (jScrollPane == null) {
jScrollPane = new JScrollPane();
jScrollPane.setViewportView(getJList());
}
return jScrollPane;
}
private JTextArea getJTextArea() {
if (jTextArea == null) {
jTextArea = new JTextArea();
jTextArea.setBackground(java.awt.SystemColor.control);
jTextArea.setEditable(false);
jTextArea.setOpaque(false);
jTextArea.addMouseListener(new MouseAdapter() {
public void mousePressed(final MouseEvent evt) {
if (!evt.isPopupTrigger()) {
return;
}
copyText();
}
public void mouseReleased(final MouseEvent evt) {
if (!evt.isPopupTrigger()) {
return;
}
copyText();
}
private void copyText() {
if (jTextArea.getSelectedText() != null) {
jTextArea.copy();
return;
}
jTextArea.setSelectionStart(0);
jTextArea.setSelectionEnd(jTextArea.getText().length());
jTextArea.copy();
jTextArea.setSelectionEnd(0);
}
});
}
return jTextArea;
}
private JTabbedPane getJTabbedPane() {
if (jTabbedPane == null) {
jTabbedPane = new JTabbedPane();
jTabbedPane.addTab("Info", null, getJPanelInfo(), null); //$NON-NLS-1$
jTabbedPane.addTab("Details", null, getJScrollPane2(), null); //$NON-NLS-1$
}
return jTabbedPane;
}
private JPanel getJPanelInfo() {
if (jPanelInfo == null) {
jPanelInfo = new JPanel();
jPanelInfo.setLayout(new BorderLayout());
jPanelInfo.add(getJPanel(), java.awt.BorderLayout.NORTH);
jPanelInfo.add(getJScrollPane(), java.awt.BorderLayout.CENTER);
}
return jPanelInfo;
}
private JScrollPane getJScrollPane2() {
if (jScrollPane2 == null) {
jScrollPane2 = new JScrollPane();
jScrollPane2.setViewportView(getJTextArea());
}
return jScrollPane2;
}
private JList getJList() {
if (jList == null) {
jList = new JList();
}
return jList;
}
private JButton getYesButton() {
if (yesButton == null) {
yesButton = new JButton();
yesButton.setText("Yes"); //$NON-NLS-1$
yesButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
yesBtnPressed = true;
dispose();
}
});
}
return yesButton;
}
} // @jve:decl-index=0:visual-constraint="10,10"
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -