Условно, таймер работает с задержкой 5 секунд:
Как описать событие, происходящее в середине ожидания, чтобы ожидание заканчивалось и сразу происходил следующий тик, а ожидание начиналось заново (5 секунд):
public void actionPerformed(ActionEvent arg0) {
{код тика}
}
public void btnClicked(){
{код события, после которого должен моментально начаться actionPerformed}
}
Пробовал вызывать actionPerformed(null), тик отрабатывается моментально, но таймер выдает еще один свой "правильный" очередной тик через 5 сек от предыдущего. Получается 3 тика за 5 секунд.
Таймер на каждую секунду. В таймере счетчик. При нажатии счетчик сбрасывается. Если счетчик больше 5 - вызываем actionPerformed() и сбрасываем опять таймер.
Счетчики:
int count = 0;
int maxCount = 5;
Таймер:
Timer timer = new Timer()
TimerTask timerTask = new TimerTask() {
@Override
public void run() {
count++;
if(count > maxCount) {
actionPerformed();
}
}
});
timer.scheduleAtFixedRate(timerTask, 0, 1000);
И событие тика:
actionPerformed() {
count = 0;
}
Либо ресетим таймер при каждом тике:
Таймер:
Timer timer;
TimerTask timerTask = new TimerTask() {
@Override
public void run() {
actionPerformed(null);
}
});
Событие тика:
public void actionPerformed(ActionEvent arg0) {
if(timer != null) {
timer.cancel();
timer.purge();
}
Timer timer = new Timer();
timer.schedule(timerTask, 0, 5000);
}
Второй способ правильней, т.к. в первом будет не ровно 5 секунд, а промежуток от 4 до 5.
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники