我有一个框架,它启动swingTimer来执行周期性任务。问题是当我关闭框架时,任务仍然继续。如果按下关闭按钮,我希望swingTimer停止。
我尝试过指定EXIT_ON_CLOSE
和DISPOSE_ON_CLOSE
,但这些都不起作用。有人知道我应该做什么吗?
由于
答案 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();
}
});
}
}
如果这对您没有帮助,那就做我做过的事情:发布一个小的可编辑且可运行的程序来演示您的问题。