2011-12-05 31 views
4

我需要一個Timer,它基本上每t秒執行一次。但我希望能夠修改定時器重複任務的定時器週期。我寫的是這樣的:具有非固定延遲的Java定時器

public Bot() { 
    timer = new Timer(); 
    timer.schedule(new Task(), 1000, moveTime = 1000);   
} 

public class Task extends TimerTask { 
    @Override 
    public void run() { 
     System.out.println("Time Passed from last repeat:" + movetime) 
     moveTime += 1000; 
    } 

因此,1000毫秒延時定時器啓動後,每moveTime毫秒重複。問題是,即使我將movetime增加了1000,定時器始終運行在初始延遲(1000),但每當定時器調用run()時,movetime的值增加(2000,3000,4000等)。

我錯過了什麼,或者我有什麼替代方案每't'秒重複一個任務't'是可變的?

謝謝。

+1

在擺動範圍內,['javax.swing.Timer'](http://docs.oracle.com/javase/tutorial/uiswing/misc/timer.html)支持'setDelay()'。 – trashgod

回答

12

我不認爲java.util.Timer類支持這一點。

你可以做的事情是使用Timer.schedule(TimerTask, int)方法,該方法可以在一段時間後執行你的任務。當你的任務被執行時,你可以用你想要的新時間間隔來安排一個新的計時器。

是這樣的:

int moveTime = 1000; 

Timer timer = new Timer(); 

public Bot(){ 
    timer.schedule(new Task(), moveTime); 
} 

public class Task extends TimerTask { 
    @Override 
    public void run() { 
     System.out.println("Time Passed from last repeat:"+movetime) 
     moveTime += 1000; 
     timer.schedule(new Task(), moveTime) 
    } 
}