java - .cancel() 之后重新启动计时器

标签 java android

调用 .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/

相关文章:

Java 8 和 Java 时间

java - Android,在代码中找到所有请求权限的地方

java - 尝试检索 Spring bean 但不断收到 NullPointerException

java - 使用三重嵌套 for 循环来增加打印行的长度和计数

android - MaterialDatePicker 返回错误值

android - 启动时禁用抽屉导航

android - 从多选 ListView 返回值

Java - 使用 hasNext() 方法时出现 "cannot find symbol"错误

android - 为什么在 android Logcat 中打印空字符串什么都不显示?

适用于手机和平板电脑的 Android 应用程序 : 1 or 2 apps?