gpt4 book ai didi

Java - 调用取消后重用计时器对象

转载 作者:行者123 更新时间:2023-12-02 08:20:23 25 4
gpt4 key购买 nike

我有一个Java应用程序,我需要安排一个TimerTask,它将在500ms后执行,但是如果发生某个事件,我必须重置该任务的计时器(这样我们就必须再等待 500 毫秒让它执行)。我为整个类(class)声明了一个计时器。我使用以下代码:

public static void main(String[] args) {

if (curr_pck == my_pck) {
timer.cancel();
timer.purge();
timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
myTask();
}
}, 500);
}

}


public static void myTask() {

timer.cancel();
timer.purge();

timer = new Timer();

timer.schedule(new TimerTask() {
@Override
public void run() {
myTask();
}
}, 500);

//EXECUTE CODE WHICH ISN'T RELEVANT TO THE QUESTION

}

我知道如果我使用 timer.cancel() 我无法重用计时器对象,但是我认为在 timer = new Timer() 行中重新初始化它> 应该可以解决这个问题。有什么办法可以解决这个问题吗?

myTask() 函数内 timer.schedule(new TimerTask() {) 出现异常:

java.lang.IllegalStateException:计时器已取消。

最佳答案

使用适当的方法创建一个 Timerr 类。然后像访问普通计时器一样访问它。

public class Timerr
{
private Timer timer;

public Timerr()
{
timer = new Timer();
start();
}

public void start()
{
timer.schedule(new TimerTask()
{
@Override
public void run()
{
System.out.println("hi");
}
}, 500);
}

public void reset()
{
timer.cancel();
timer.purge();
start();
}
}

创建实例

private Timerr timer = new Timerr();

重置

if(condition)
{
timerr.reset();
}

关于Java - 调用取消后重用计时器对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42876561/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com