繁体   English   中英

通过同一按钮的起停计时器

[英]Start-Stop timer via same Button

我尝试通过相同的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");

        }

    }

当用户按下按钮时; 按钮名称从“开始”的“停止”更改为“通知者”文本字段的涂色为绿色,并在“正在运行”中写入内容,然后在计时器下方启动

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分钟,然后按开始按钮。 当按下开始按钮时,worker1立即执行,并且计时器开始倒计时。 在20-30秒内,按STOP按钮,然后等待5-10秒。 再次按开始按钮。 问题是这里2个计时器现在已经在运行。 第一次倒计时完成时,worker1将执行。 5到10秒后,计时器fininsh继续倒数计时,然后再次启动worker1。

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

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

问题完全不在JButtons中。

问题是您没有正确取消工作程序任务。 这里:

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

您不能保证定时器完成后按钮上的文字将为“ STOP”。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM