У меня есть класс, разработанный с помощью 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, которое также закрывает процесс приложения?
Примечания:
System.exit (0); не подходит, потому что это завершает приложение также, если есть другой фоновый запущенный поток, и я не хочу этого. Класс MainWindow должен закрывать и освобождать свой ресурс, то же самое поведение при закрытии приложения с помощью кнопки X, закрывающей экземпляр MainWindow, но если запущен фоновый поток, он не убивает их, а ждет, пока они закончат свою работу ...
Окружающая среда: