2011-12-05 2 views
4

Мне нужен Timer, что basicaly делает что-то каждые 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), но значение movetime увеличивается (2000,3000,4000 и т. Д.) Каждый раз, когда таймер вызывает run().

Я пропущу что-то или что у меня есть для повторения задачи каждый '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) 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^