我通过相同的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。
如果任何倒计时已经激活,当按下相同按钮时,如何停止当前计时器倒计时?
答案 0 :(得分:0)
您可以在同一个地方使用两个不同的按钮。 首先按下开始按钮时,计时器将启动,按钮将隐藏,停止按钮将出现,反之亦然。
答案 1 :(得分:0)
探员根本不在摇摆JButtons。
问题在于您没有正确取消工作任务。这里:
if (Button.getText().equals("STOP")){
Worker1 worker1 = new Worker1();
worker1.execute();
}
else{
ScheduledTask.this.cancel();
}
完成计时器后,您无法保证该按钮的文字数字为“STOP”。
当您按下停止按钮时,您需要停止计时器本身,以防止首先启动计划任务。