У меня есть класс, разработанный с помощью windowbuilderpro, который я хочу закрыть также с помощью JButton, а не с помощью стандартной кнопки X в окне, поэтому вот пример класса:
public class MainWindow {
public JFrame frame;
public MainWindow() {
initialize();
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
public void show() {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
//Show the main Frame
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
Когда я закрываю окно с помощью кнопки X, окно закрывается правильно, и процесс завершается.
Когда я вместо этого закрываю JButton, у которого есть этот слушатель:
mntmExit.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
//Close the application main form
frame.setVisible(false);
frame.dispose();
}
});
окно кадра корректно закрывается, но процесс остается живым... Почему?
Как вы можете видеть, существует поток AWT-Shutdown, который непрерывно запускается и завершается. Как я могу добиться такого же поведения кнопки X, которая закрывает также процесс приложения?
Примечания:
Система.выход(0); не подходит, потому что он завершает приложение также, если есть другой фоновый поток, а я этого не хочу. Класс MainWindow должен закрыть и освободить свой ресурс, то же поведение, что и при закрытии приложения с помощью кнопки X, которая закрывает экземпляр MainWindow, но если есть фоновый поток, он не убивает их, а ждет, пока они закончат свою работу...
Окружающая среда:
- JDK 7
- Затмение 3.7.1