Я пытаюсь реализовать определенный шаблон для небольшого класса DigitalWatch с минимальным интерфейсом в java (просто практика).Как отменить потенциально бесконечный цикл нажатием кнопки?
У этого есть 2 кнопки: кнопка режима и кнопка приращения.
Кнопка режима имеет прослушиватель, который запускает изменение состояния моей программы между «SetHours, SetMinutes, DisplayTime» (которые существуют как объекты из-за шаблона, объекты вызывают определенные методы зависимости состояния в моем классе DigitalWatch) ,
Мой метод displayTime()
что-то вроде этого:
void displayTime()
{
while (pressed==false)
{
try
{
display.setText(String.format("%02d:%02d", hours, minutes));
display.repaint();
Thread.sleep(1000);
minutes = minutes + 1;
if (minutes > 59)
{
minutes = 0;
hours = hours + 1;
}
if (hours > 23)
{
hours = 0;
}
display.setText(String.format("%02d:%02d", hours, minutes));
display.repaint();
} catch (Exception e)
{
break;
}
}
display.setText(String.format("%02d:%02d", hours, minutes));
display.repaint();
}
Но, кажется, что в то время как этот цикл активен кнопка теряет свою кликабельность.
Итак, как только «время отсчитывается», я застрял в этом состоянии и больше не могу изменить режим. Есть ли хороший способ/передовая практика для поддержания кликабельности моего режима?
Возможный дубликат [свинг GUI Предотвращение блокировки во время фоновой задачи] (http://stackoverflow.com/questions/940913/prevent-swing-gui-locking-up -during-a-background-task) – Raniz
Вы блокируете поток отправки событий. То есть ваш поток gui. Вам нужно поместить этот код в отдельный поток. Однако обновление элементов gui должно выполняться на edt. Поэтому вам нужно разделить это. – Fildor
Это приводит меня к, вероятно, глупому вопросу: где же это в моем случае? – Wolfone