javax.swing.Timer внутри JDialog не останавливается при закрытии JDialog

У меня есть небольшое приложение с основным JFrame, открывающим JDialog как модальное. Внутри этого JDialog я запускаю javax.swing.Timer, который должен останавливаться, если JDialog закрывается.

public Tasks() {
    setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    setBounds(100, 100, 800, 600);
    contentPane = new JPanel();
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    contentPane.setLayout(new BorderLayout(0, 0));
    setContentPane(contentPane);

    showTasks();

    t = new Timer(10000, new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            Tasks.this.showTasks();
        }
    });
    t.start();

}

Но он просто продолжает работать.

Я попытался реализовать WindowListener для JDialog и перезаписал windowClosed, windowClosing и даже windowDeactivated... безрезультатно

@Override
public void windowClosing(WindowEvent e) {
    // TODO Auto-generated method stub
    System.out.println("Closing");
    t.stop();
}

Как я могу остановить таймер при закрытии JDialog?


person devnull69    schedule 05.03.2013    source источник
comment
Измените свой вопрос, включив в него sscce, демонстрирующий ваш подход.   -  person trashgod    schedule 05.03.2013
comment
opening a JDialog as modal. Убедитесь, что вы добавили WindowListener в диалоговое окно, прежде чем сделать его видимым.   -  person camickr    schedule 05.03.2013


Ответы (1)


Я добавил к этому примеру WindowListener, и, похоже, это сработало.

this.addWindowListener(new WindowAdapter() {

    @Override
    public void windowClosing(WindowEvent e) {
        System.out.println(e);
    }
});
person trashgod    schedule 05.03.2013
comment
+1.. @devnull69 Также, если это JDialog, используйте setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); :P - person David Kroukamp; 05.03.2013
comment
Вот и все. Я только что добавил реализации WindowListener в определение JDialog и позволил Eclipse добавить отсутствующие методы. Это явно не сработало. - person devnull69; 05.03.2013
comment
Легко опустить addWindowListener; рад, что вы разобрались. - person trashgod; 06.03.2013