我有一个Java应用程序,我需要安排一个TimerTask
,它将在500ms后执行,但如果发生某个事件,我必须重置此任务的计时器(这样我们必须等待另一个500ms为了它执行)。我为全班宣布了timer
。我使用以下代码:
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()
中重新初始化它应该可以解决这个问题。有没有办法解决这个问题?
timer.schedule(new TimerTask() {
函数内的myTask()
行的例外:
java.lang.IllegalStateException: Timer already cancelled.
答案 0 :(得分:-1)
使用适当的方法创建一个类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();
}
答案 1 :(得分:-2)
您可能想要查看Java的Swing计时器。它的工作方式有所不同,您可能需要编写内部类或actionlistener,但Swing计时器包含.stop()和.restart(),看起来它们在您的应用程序中可以更好地工作。