Если цель состоит в том, чтобы запускать код каждые X секунд, моим первым выбором было бы использовать util.Timer. Другой вариант - использовать ScheduledExecutorService, который добавляет пару улучшений по сравнению с util.Timer (лучше обработка исключений для одного).
Я стараюсь избегать Swing.Timer, так как я предпочитаю оставлять EDT (поток отправки событий) незагроможденным.
Многие люди пишут «игровой цикл», который ближе к тому, что вы начали. Поиск по «игровому циклу», вероятно, даст вам несколько вариантов, в зависимости от того, хотите ли вы сохранить стабильную ставку или нет.
Иногда в ситуациях, когда вы не хотите постоянно тестировать и перезагружать, можно объединить две функции с помощью операции «И». Например, если вы И 63 до целого числа, у вас есть диапазон 0-63 для итерации. Это хорошо работает на диапазонах, которые имеют мощность 2.
В зависимости от структуры вашего кода вызова вы можете передать переменную «statetime» в качестве параметра и протестировать, если она больше вашего желаемого X. Если вы сделал это, я полагаю, что шаг в вызываемом коде сбрасывает «statetime» на ноль.
Другая идея - передать метод «startTime» методу обновления. Затем ваш таймер проверит разницу между currentTimeMillis и startTime, чтобы узнать, прошло ли X секунд или нет. Опять же, код, который вы вызываете, должен, вероятно, установить новый «startTime» как часть процесса. Самое приятное в этом методе заключается в том, что нет необходимости увеличивать истекшее время.
Пока я штампует идеи: могли бы также создать будущее «targetTime» переменную и испытание, если currentTimeMillis() - targetTime> 0.
или targetTime начальный промежуток может быть неизменны, который часто обеспечивает легкий плюс , в зависимости от того, как они используются.
Возможно ли использовать весну? –
Я хочу что-то только на Java. Никаких API-интерфейсов не требуется. Там должно быть какое-то математическое решение. – vedi0boy
Это то, что вы хотите? http://stackoverflow.com/questions/4544197/how-do-i-schedule-a-task-to-run-at-periodic-intervals – mazaneicha