在帧关闭时停止jTimer

时间:2011-06-27 02:14:46

标签: java timer jframe

我有一个框架,它启动swingTimer来执行周期性任务。问题是当我关闭框架时,任务仍然继续。如果按下关闭按钮,我希望swingTimer停止。

我尝试过指定EXIT_ON_CLOSEDISPOSE_ON_CLOSE,但这些都不起作用。有人知道我应该做什么吗?

由于

1 个答案:

答案 0 :(得分:3)

Swing Timer有一个停止方法。如果“frame”(JFrame ??)通过WindowListener结束,你总是可以调用它。

另外,根据我的测试,如果EDT停止,Timer应该自行停止。例如:

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();
         }
      });
   }
}

如果这对您没有帮助,那就做我做过的事情:发布一个小的可编辑且可运行的程序来演示您的问题。