Страницы

Поиск по вопросам

воскресенье, 8 декабря 2019 г.

Таймер в методе java

#java


Как создать таймер в методе boost, по истечению которого запустится метод stopboost?

Я поискал на стаке и нашел таймер, только не знаю, как им пользоваться.Таймер.

public void boost() {
    unboost = false;
    velocity.y = 200;
}

public void stopboost() {
    velocity.y = 0;
}

    


Ответы

Ответ 1



Объясняю. Нам нужен класс Timer, который создан для того, чтобы ставить отложенные задачи. Метод public void schedule(TimerTask task, long delay) работает достаточно просто. Второй аргумент delay — задержка в миллисекундах. Первый аргумент — экземляр объекта TimerTask. Этот абстрактный класс предельно прост и требует реализовать всего один метод: public class MyTimerTask extends TimerTask { @Override public void run() {...} } Итак, нам нужен экземпляр этого класса. Как мы можем его получить? Проще всего объявить анонимный класс. TimerTask tt = new TimerTask() { @Override public void run() { // тут наш код } } Для того, чтобы использовать Timer, нужно создать его экземляр: Timer timer = new java.util.Timer(); Отдаем ему наш TimerTask: timer.schedule(tt, 1000); Если Timer нам больше не нужен, то мы можем и не присваивать его переменной, а выполнить метод на свежесозданном экземпляре и забыть о нем: new java.util.Timer().schedule(tt, 1000); Поскольку и TimerTask нам больше не нужен, то мы можем его создавать прямо в вызове метода: public void boost() { //какой-то код метода new java.util.Timer().schedule( new TimerTask() { public void run() { stopboost(); } }, 1000 ); //дальше код метода } public void stopboost() { velocity.y = 0; } И наконец, если метод stopboost существует только ради этого таймера, то и его мы тоже исключим (inline это называется) public void boost() { //какой-то код метода new java.util.Timer().schedule( new TimerTask() { public void run() { velocity.y = 0; } }, 1000 ); //дальше код метода }

Ответ 2



а почему бы не сделать так public void boost() { unboost = false; velocity.y = 200; try { Thread.sleep(1000); // 1000 это 1 секунда stopboost(); } catch (Exception ex) { } } public void stopboost() { velocity.y = 0; }

Комментариев нет:

Отправить комментарий