Poniższy program zawiera kod, który zakończy program brakuje obcych wątki bez jawne wywoływanie System.exit(). Aby zastosować ten przykład do aplikacji używających wątków/detektorów/liczników czasu/etc, wystarczy wstawić kod czyszczenia żądając (i jeśli ma to zastosowanie, oczekując) ich zakończenia przed ręcznym uruchomieniem WindowEvent w actionPerformed().
Dla tych, którzy chcą skopiować/wkleić kod, który może działać dokładnie tak, jak pokazano, na końcu dołączona jest nieco brzydka, ale poza tym nieistotna metoda główna.
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);
}
});
}
}
Proszę opublikować fragment kodu swojego licznika czasu. –