У меня есть приложение Java, которое открывает JFrame и рисует в нем.Проблема в том, что когда я пытаюсь выйти из приложения, закрыв окно JFrame (на моем Mac или ПК) или выбрав «Выход» в строке меню (на моем Mac), приложение просто зависает.Что интересно, такое поведение появилось только после того, как я добавил JButton в свое приложение.Вот мой код:
public class MyApplicationFrame extends JFrame {
public MyApplicationFrame(MyApplicationLogic l) {
super();
this.appLogic = l;
try {
SwingUtilities.invokeAndWait(new Runnable() {
@Override public void run() {
createAndShowGUI();
}
});
}
catch(InterruptedException e) { }
catch(InvocationTargetException e) { }
g = getGraphics();
}
public void paint() { ... }
private void createAndShowGUI() {
final Container c = getContentPane();
c.setLayout(new java.awt.FlowLayout());
final JButton startButton = new JButton("Start");
// if I comment out these lines with the startButton, everything works
startButton.addActionListener(new ActionListener() {
@Override public void actionPerformed(ActionEvent event) {
appLogic.run();
c.remove(startButton);
}
});
c.add(startButton);
setSize(FRAME_SIZE, FRAME_SIZE);
setVisible(true);
}
}
В моей логике приложения у меня есть следующий метод:
public void run() {
appFrame.paint();
getNextState();
// then I added the following code to try and help solve this problem
System.err.println(java.awt.Toolkit.getDefaultToolkit().getSystemEventQueue().peekEvent());
}
Вывод в потоке System.err выглядит следующим образом:
null
null
null
null
null
// here's where I typed command-Q
java.awt.event.MouseEvent[MOUSE_CLICKED,(210,45),absolute(210,67),button=1,modifiers=Button1,clickCount=1] on frame0
java.awt.event.MouseEvent[MOUSE_CLICKED,(210,45),absolute(210,67),button=1,modifiers=Button1,clickCount=1] on frame0
java.awt.event.MouseEvent[MOUSE_CLICKED,(210,45),absolute(210,67),button=1,modifiers=Button1,clickCount=1] on frame0
У меня нет никаких слушателей мыши в приложении (хотя я предполагаю, что объект JButton имеет его), и я не зарегистрировал никаких слушателей, кроме ActionListener в JButton.И я не трогал мышь.Но я предполагаю, что все эти MouseEvents не дают приложению завершиться.Кто-нибудь знает, что я могу с этим сделать?Благодаря.