我试着通过同样的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");
}
}当用户按下按钮时,按钮名称从STOP改为STOP,命名为informer textfield paint为绿色并在运行中写入,并在定时器启动时,
public class ScheduledTask extends TimerTask {
public void run() {
if (Button.getText().equals("STOP")){
Worker1 worker1 = new Worker1();
worker1.execute();
}
else{
ScheduledTask.this.cancel();
}
}
}正如您所看到的,timer执行一个名为worker1的SwingWorker。如果我再按一次button (命名为STOP),jbutton被重命名为START和timer,在按钮文本中看不到STOP,而是stop本身。
想象一下,将定时器设置为1分钟,然后按下开始按钮。当开始按钮按下,worker1立即执行和计时器开始倒计时,你知道。在20-30秒内,按下停止按钮,等待5-10秒。再次按下START按钮。这里的问题是2个计时器已经在运行了。当第一个定时器倒计时完成时,执行worker1。5-10秒后,定时器结束旧的倒计时并再次启动worker1。
如果任何倒计时已经激活,当按下相同的按钮时,我如何停止当前计时器倒计时?
发布于 2014-05-20 17:21:39
您可以在同一位置使用两个不同的按钮。最初,当按下启动按钮时,定时器将启动,按钮将隐藏,停止按钮将出现,反之亦然。
发布于 2014-05-20 17:27:33
probmen根本不在swing JButtons中。
问题是您没有正确地取消工作任务。这里:
if (Button.getText().equals("STOP")){
Worker1 worker1 = new Worker1();
worker1.execute();
}
else{
ScheduledTask.this.cancel();
}您不能保证在计时器结束时按钮上会有文字"STOP“。
您需要在按下停止按钮时停止计时器本身,以防止从一开始就启动计划任务。
https://stackoverflow.com/questions/23755630
复制相似问题