Наступна програма включає код, який завершить програму без сторонніх потоків без явного виклику System.exit (). Для того, щоб застосувати цей приклад до програм, що використовують потоки / прослуховувачі / таймери / і т. Д., Потрібно лише вставити код очищення, що вимагає (і, якщо це можливо, чекає) їх завершення, перш ніж WindowEvent буде ініційовано вручну в actionPerformed ().
Для тих, хто хоче скопіювати / вставити код, здатний працювати точно так, як показано, наприкінці додається трохи потворний, але в іншому випадку нерелевантний основний метод.
public class CloseExample extends JFrame implements ActionListener {
private JButton turnOffButton;
private void addStuff() {
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
turnOffButton = new JButton("Exit");
turnOffButton.addActionListener(this);
this.add(turnOffButton);
}
public void actionPerformed(ActionEvent quitEvent) {
/* Iterate through and close all timers, threads, etc here */
this.processWindowEvent(
new WindowEvent(
this, WindowEvent.WINDOW_CLOSING));
}
public CloseExample() {
super("Close Me!");
addStuff();
}
public static void main(String[] args) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
CloseExample cTW = new CloseExample();
cTW.setSize(200, 100);
cTW.setLocation(300,300);
cTW.setVisible(true);
}
});
}
}