event dispatch thread已引發異常。它會自動重新啓動,但您的程序仍處於您描述的狀態。另見How can I catch Event Dispatch Thread (EDT) exceptions和answer。
補充:How uncaught exceptions are handled和Uncaught exceptions in GUI applications可能會有所幫助。同時檢查空的異常處理程序。
附錄:下面是一個例子。
import java.awt.EventQueue;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.Timer;
/** @see https://stackoverflow.com/a/9935287/230513 */
public class Fail extends JPanel {
private static final JLabel label = new JLabel(
"123456789", JLabel.CENTER);
public Fail() {
this.setLayout(new GridLayout(0, 1));
this.add(label);
this.add(new JButton(new AbstractAction("Kill me, now!") {
@Override
public void actionPerformed(ActionEvent e) {
JButton b = (JButton) e.getSource();
b.setText(String.valueOf(1/0));
}
}));
new Timer(100, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
label.setText(String.valueOf(System.nanoTime()));
}
}).start();
}
private void display() {
JFrame f = new JFrame("Example");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(this);
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new Fail().display();
}
});
}
}
後的一個SSCCE http://sscce.org – 2012-03-29 23:33:05
我不認爲我可以(我知道這將讓幫助我很辛苦)。我真正想知道的是,如果有人知道這樣的事情可以預見的發生,而不會導致堆棧跟蹤。那麼也許我可以找到問題。 – Robert 2012-03-29 23:42:48
某些模式對話框會在後臺運行,並且不屬於您的JFrame?使用調試器可能有助於暫停EDT並查看堆棧跟蹤?您也可以使用JConsole – 2012-03-29 23:45:35