调用 .cancel 方法后如何重新启动计时器? 我的计时器在 onCreate 方法中声明。
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
--standby_zaehler;
if(standby_zaehler < 0) {
rndm_groesse = stand_by.length;
random_zahl = r.nextInt(rndm_groesse);
speakOut(stand_by[random_zahl]);
for (;;)
{
standby_zaehler = r.nextInt(60);
if (standby_zaehler >= 15)
break;
}
}
}
}, 1000, 1000);
我在其他地方打电话
timer.cancel();
但是我想在取消后重新启动它,但不知道如何。有办法吗?
最佳答案
实现此目的的方法是,每次取消计时器后想要重新运行计时器时,重新实例化正在运行的 TimerTask,因为取消计时器也会取消与其关联的 TimerTask。 此外,您需要创建一个 boolean 值来检查计时器是否打开,这样如果打开了,只需取消它,如果没有,则重新实例化任务和计时器(两者),否则您将得到异常可能正在谈论 我给你写了这段代码作为示例,我尝试了一下,效果很好
Timer timer;
boolean timerOn = false;
@FXML
private void setTimer(ActionEvent event) {
if (timerOn) {
timer.cancel();
timerOn = false;
} else {
timer = new Timer();
TimerTask runBlinking = new TimerTask() {
@Override
public void run() {
blinkCircle();
}
};
timer.schedule(runBlinking, 1, Long.parseLong(txt_seconds.getText()));
timerOn = true;
}
}
关于java - .cancel() 之后重新启动计时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25772071/