在actionPerformed方法中停止Swing Timer?

时间:2013-12-29 09:16:16

标签: java swing timer

如何在其actionPerformed方法中停止Swing计时器? 我可以在actionPerformed方法之外启动和停止计时器但不能在方法中如何实现此目的?

final int i =0;
    final Timer timer = new Timer(10, new ActionListener() {
        int i = 0;
        public void actionPerformed(ActionEvent evt) {
            i++;
            System.out.println(i);
            if(i == 100) {
                timer.stop();
            }


        }    
    });
    timer.start();

3 个答案:

答案 0 :(得分:3)

从动作方法中停止摆动计时器工作正常。我认为您的代码存在的问题是,它甚至无法编译,因为您在分配之前访问了timer变量。

将作业分成两部分,如下所示,它将编译并正常工作。

final Timer timer = new Timer(10, null);
timer.addActionListener(new ActionListener() {
    ...
});

答案 1 :(得分:2)

将计时器声明为类成员。此外,您可能还希望将int i声明为类成员,因为在计时器内创建一个新成员是没有意义的,如果您尝试每次重复递增它。请参阅我的代码更正

Timer timer = null;
int i = 0;
public Constructor() {

    timer = new Timer(10, new ActionListener() {
        public void actionPerformed(ActionEvent evt) {
            i++;
            System.out.println(i);
            if(i == 100) {
                timer.stop();
            }
        }    
    });
    timer.start();
}

答案 2 :(得分:1)

您可以从ActionEvent获取Timer:

Timer timer = (Timer)evt.getSource();