通过相同的按钮启动 - 停止计时器

时间:2014-05-20 09:14:22

标签: java swing timer awt

我通过相同的Jbutton尝试启动 - 停止计时器。让我分享一下我的代码;

按钮操作;

private void ButtonActionPerformed(java.awt.event.ActionEvent evt) {                                       

        if(Button.getText().equals("START")){
        Button.setText("STOP");
        Spinner.setEnabled(false);
        Informer.setBackground(Color.green);
        Informer.setText("Running");
        Timer time = new Timer();
        ScheduledTask st = new ScheduledTask();
        time.schedule(st, 0, (int) Spinner.getValue()*1000*60);
        }
        else{
        Button.setText("START");
        Spinner.setEnabled(true);
        Informer.setBackground(Color.red);
        Informer.setText("Stopped");

        }

    }

当用户按下按钮时;按钮名称从START更改为STOP, 将informer textfield paint命名为green并写入Running, 在计时器下面开始,

public class ScheduledTask extends TimerTask {

    public void run() {
        if (Button.getText().equals("STOP")){
                   Worker1 worker1 = new Worker1();
                   worker1.execute();
                }
                else{
                ScheduledTask.this.cancel();
                }
    }
}

正如您所见,计时器执行名为worker1的SwingWorker。如果我再次按下按钮(名为STOP),jbutton将重命名为START,并且计时器不会在按钮文本中看到STOP而不是停止。

想象一下,将计时器设置为1分钟,然后按下START按钮。按下START按钮后立即执行worker1并且计时器开始倒计时你知道。在20-30秒内按STOP按钮并等待5-10秒。再次按下START按钮。问题是这里2个计时器已经运行了。第一次计时器倒计时完成worker1执行。 5-10秒后计时器fininsh旧倒计时并再次启动worker1。

如果任何倒计时已经激活,当按下相同按钮时,如何停止当前计时器倒计时?

2 个答案:

答案 0 :(得分:0)

您可以在同一个地方使用两个不同的按钮。 首先按下开始按钮时,计时器将启动,按钮将隐藏,停止按钮将出现,反之亦然。

答案 1 :(得分:0)

探员根本不在摇摆JButtons。

问题在于您没有正确取消工作任务。这里:

    if (Button.getText().equals("STOP")){
               Worker1 worker1 = new Worker1();
               worker1.execute();
    }
    else{
            ScheduledTask.this.cancel();
    }

完成计时器后,您无法保证该按钮的文字数字为“STOP”。

当您按下停止按钮时,您需要停止计时器本身,以防止首先启动计划任务。