JavaFX: заставить LocalDateTime вызывать событие? - PullRequest
0 голосов
/ 20 апреля 2019

Я хочу автоматизировать онлайн-игру.Это работало, в то время как это было только основано на терминале.Но я хотел добавить пользовательский интерфейс JavaFX, и теперь я не знаю, куда поместить Thread.waits, пока не будет достигнут определенный LocalDateTime.Где JavaFX ожидает свои события (например, нажатия кнопок, ...) и могу ли я перезаписать этот метод?Или есть способ создания пользовательских событий LocalDateTime и слушателей для javaFX?

Если я добавлю Thread.wait в initialize (), вся сцена не появится, пока не будет достигнут определенный LocalDateTime.

1 Ответ

2 голосов
/ 20 апреля 2019

Если вы хотите, чтобы событие запускалось в какой-то заранее заданный момент, но вы хотите, чтобы пользовательский интерфейс приложения оставался реагирующим на действия пользователя, вам нужен фоновый поток.Вы почти никогда не должны спать в GUI-потоке своего приложения, так как оно перестает отвечать на запросы и может показаться сбойным.Для удовольствия, попробуйте это неправильно: Перенесите Thread.sleep вызов в код GUI, чтобы увидеть, как оно временно замораживает ваше приложение.

Узнайте о параллелизме .Начните с Oracle Tutorial и продвигайтесь до ежегодного чтения Библии, Java-параллелизма на практике от Goetz et al.

Фреймворк Executors был создан для упрощения работы с потоками.В частности, вам понадобится класс ScheduledExecutorService.Это уже было рассмотрено много раз на Stack Overflow.Поиск, чтобы узнать больше.

И узнать, как правильно взаимодействовать с потоком GUI из фонового потока .

Никогда не использовать LocalDateTimeотслеживать момент, как объяснено в классе док.На мгновение используйте Instant, OffsetDateTime или ZonedDateTime.Для промежутка времени по шкале часов-минут-секунд используйте Duration.Класс Duration предлагает такие методы, как toMinutes, toSeconds, результаты которого вы можете указать как ваша задержка до ScheduledExecutorService.Все эти классы много раз освещались в Переполнении стека.Поиск, чтобы узнать больше.

...