我有一个游戏,它使用显示游戏信息的JFrame。只要玩家将移动对象发送到服务器,窗口就会更新。它适用于任何数量的移动对象。然而,一旦第3次转弯开始就撞到墙壁,这就是:
究竟是什么导致程序执行此操作?
答案 0 :(得分:4)
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(
"12345678901234567890", 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();
}
});
}
}
答案 1 :(得分:0)
检查您的框架类是否不覆盖isEnabled()方法。 我花了几个小时来寻找异常,但是响应却很微不足道:我已经用这种方法实现了接口。