按钮中的Java Util Timer

时间:2015-07-22 05:43:10

标签: java button timer

我正在进行棋盘游戏,在游戏的一部分中,我需要有这样的按钮,当点击时,会以1秒延迟间隔重复计算1到5的标签,之后会改变标签变成“完成”,但问题是它将标签更改为“完成”然后再计数。

btn.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent arg0) {
            timer = new Timer();
            timer.scheduleAtFixedRate(new TimerTask() {
                // @Override
                public void run() {
                    count++;
                    if (count >= 6) {
                        timer.cancel();
                        timer.purge();
                        return;
                    }
                    lbl.setText(String.valueOf(count));
                }
            }, 1000,1000);
            lbl.setText("done");
        }});

1 个答案:

答案 0 :(得分:0)

单击按钮时,将按顺序执行actionPerformed()方法:

  1. 创建新计时器
  2. 注册任务以便每秒定期执行,将来
  3. 将按钮标签设置为“完成”
  4. 然后,稍后,计时器完成其工作并将开始增加变量计数,每次更新按钮标签。像这样阅读应该有助于你理解发生了什么:计时器是在一个单独的线程中执行的。 timer.scheduleAtFixedRate()是一个非阻塞函数,它注册一个TimerTask以便稍后执行,并立即返回。

    要解决您的问题,可以采用类似的解决方案:

    btn.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent arg0) {
                timer = new Timer();
                timer.scheduleAtFixedRate(new TimerTask() {
                    // @Override
                    public void run() {
                        count++;
                        if (count >= 6) {
                            timer.cancel();
                            timer.purge();
    
                            // We set the label to done only when the counter
                            // reaches the value 6, after button displayed 5
                            lbl.setText("done");
    
                            return;
                        }
                        lbl.setText(String.valueOf(count));
                    }
                }, 1000,1000);
            }});