Если вы хотите, чтобы событие запускалось в какой-то заранее заданный момент, но вы хотите, чтобы пользовательский интерфейс приложения оставался реагирующим на действия пользователя, вам нужен фоновый поток.Вы почти никогда не должны спать в GUI-потоке своего приложения, так как оно перестает отвечать на запросы и может показаться сбойным.Для удовольствия, попробуйте это неправильно: Перенесите Thread.sleep
вызов в код GUI, чтобы увидеть, как оно временно замораживает ваше приложение.
Узнайте о параллелизме .Начните с Oracle Tutorial и продвигайтесь до ежегодного чтения Библии, Java-параллелизма на практике от Goetz et al.
Фреймворк Executors был создан для упрощения работы с потоками.В частности, вам понадобится класс ScheduledExecutorService
.Это уже было рассмотрено много раз на Stack Overflow.Поиск, чтобы узнать больше.
И узнать, как правильно взаимодействовать с потоком GUI из фонового потока .
Никогда не использовать LocalDateTime
отслеживать момент, как объяснено в классе док.На мгновение используйте Instant
, OffsetDateTime
или ZonedDateTime
.Для промежутка времени по шкале часов-минут-секунд используйте Duration
.Класс Duration
предлагает такие методы, как toMinutes
, toSeconds
, результаты которого вы можете указать как ваша задержка до ScheduledExecutorService
.Все эти классы много раз освещались в Переполнении стека.Поиск, чтобы узнать больше.