остановка jTimer при закрытии кадра - PullRequest
1 голос
/ 27 июня 2011

У меня есть кадр, который запускает swingTimer для выполнения периодической задачи. Проблема в том, что когда я закрываю рамку, задача все еще продолжается. Я хочу, чтобы swingTimer остановился, если нажата кнопка закрытия.

Я попытался указать EXIT_ON_CLOSE и DISPOSE_ON_CLOSE, но они не работают. Кто-то знает, что мне делать?

Спасибо

1 Ответ

3 голосов
/ 27 июня 2011

Таймер качания имеет метод остановки. Вы всегда можете вызвать это, если «frame» (JFrame ??) заканчивается через WindowListener.

Кроме того, согласно моим тестам, таймер должен останавливаться самостоятельно, если останавливается EDT. Например:

import java.awt.event.*;
import javax.swing.*;

public class StopTimer extends JPanel {
   private static final float FONT_SIZE = 32;
   private Timer myTimer;
   private JLabel timerLabel = new JLabel("000");
   private int count = 0;

   public StopTimer() {
      timerLabel.setFont(timerLabel.getFont().deriveFont(FONT_SIZE));
      add(timerLabel);

      int timerDelay = 1000;
      myTimer = new Timer(timerDelay , new ActionListener() {
         @Override
         public void actionPerformed(ActionEvent e) {
            count++;
            timerLabel.setText(String.format("%03d", count));
            System.out.println("count: " + count);
         }
      });
      myTimer.start();
   }

   private static void createAndShowUI() {
      JFrame frame = new JFrame("StopTimer");
      frame.getContentPane().add(new StopTimer());
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.pack();
      frame.setLocationRelativeTo(null);
      frame.setVisible(true);
   }

   public static void main(String[] args) {
      java.awt.EventQueue.invokeLater(new Runnable() {
         public void run() {
            createAndShowUI();
         }
      });
   }
}

Если вам это не поможет, то сделайте то, что я сделал: опубликуйте небольшую скомпилируемую и работающую программу, которая продемонстрирует вашу проблему.

...