Таймер Java с нефиксированной задержкой - PullRequest
4 голосов
/ 05 декабря 2011

Мне нужен Timer, который в основном делает что-то каждые t секунд. Но я хочу иметь возможность изменить период таймера, при котором таймер повторяет задачу. Я написал что-то вроде этого:

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 Ответ

12 голосов
/ 05 декабря 2011

Не думаю, что класс 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)
    }
}
...