Итак, я просматривал Интернет для ответов, но чувствую себя перегруженным и не могу найти объяснения этого. Для одного из моих классов нам был приведен пример с кодом, очень похожим на то, что я использую, и я его скопировал (опасно, что знаю, но не уверен, как это сделать.)Вызов метода startTimer Multiple Times (Java)
Я пытаюсь сделать это так что при нажатии кнопки JLabel считывает определенный текст и через 5 секунд этот текст исчезает. Я смог сделать это успешно, но есть уловка. У меня есть 6 JButtons, которые используют один и тот же ActionListener, который при правильных условиях может вызвать метод startStatusTimer.
Если нажата одна кнопка, и в течение 5 секунд нажимается другая кнопка, она запускает другой таймер, и чем больше кнопок я нажимаю больше таймеров, которые я получаю, которые никогда, кажется, никогда не останавливаются. Текст в конце концов уходит, но только после того, как прошло 5 секунд с первой нажатой кнопки.
Я продолжаю получать значения count> 5, распечатывая после нескольких нажатий несколько раз в течение нескольких секунд, но я не вижу, как это может быть из-за инструкции if.
Это не похоже на хорошую практику кодирования, чтобы оставить кучу таймеров, работающих в фоновом режиме, и как их остановить?
private void startStatusTimer()
{
ActionListener taskPerformer = new ActionListener()
{
int count=0;
public void actionPerformed(ActionEvent event)
{
count++;
System.out.println(count);
if(count>=5)
{
statusLabel.setText("");
statusTimer.stop();
}
}
};
statusTimer = new Timer(second, taskPerformer);
statusTimer.start();
}
System.out.println предназначен для отладки. Любая помощь приветствуется.
Создать 'statusTimer' только если это' null "и очистите его до" null "после завершения вашей логики. Вероятно, стоит также сделать этот код потокобезопасным, добавив 'synchronized (someFinalObject)' к слушателю и 'startStatusTimer' последние два оператора. –
Спасибо Виктору Сорокину, я добавил нулевые утверждения, и он остановил несколько таймеров от выхода ... единственное, что я хочу, чтобы последний таймер был попыткой начать начало 5-секундного таймера. Если кнопка нажата и 2 секунды пройдет, и кнопка снова нажата, я хочу, чтобы она оставалась на 5 секунд до тех пор, пока JLabel не очистится, а не 3 секунды. – Khaines0625