Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在.cancel()之后重新启动计时器_Java_Android - Fatal编程技术网

Java 在.cancel()之后重新启动计时器

Java 在.cancel()之后重新启动计时器,java,android,Java,Android,调用.cancel方法后,如何重新启动计时器? 我的计时器在onCreate方法中声明 timer.scheduleAtFixedRate(new TimerTask() { @Override public void run() { --standby_zaehler; if(standby_zaehler < 0) { rndm_gro

调用.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.scheduleAtFixedRate(新的TimerTask(){
@凌驾
公开募捐{
--扎勒;
if(备用_zaehler<0){
rndm_groesse=备用长度;
random_zahl=r.nextInt(rndm_groesse);
说话(待命[随机]);
对于(;;)
{
备用_zaehler=r.nextInt(60);
如果(待机时间>=15)
打破
}
}
}
}, 1000, 1000);
我打电话到别的地方

timer.cancel()


但我想在取消后重新启动,但不知道如何启动。有办法吗?

可以这样做,每次取消计时器后要重新运行计时器时,都要重新实例化正在运行的计时器任务,因为取消计时器也会取消与其关联的计时器任务。 此外,您需要创建一个布尔值来检查计时器是否开启,因此如果开启,只需取消它,如果没有,则重新实例化任务和计时器(两者),否则您将得到可能正在处理的异常 我写了这段代码作为一个例子,我试过了,效果很好

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;
    }      
}

不,医生是这么说的。创建一个新的timerput方法中的整个第一个代码块,然后调用该方法来启动timerAccording文档:cancel()取消TimerTask并将其从计时器队列中移除。当它从计时器队列中删除时,您必须创建一个新的队列。或者取消您的计时器任务