Таким образом, я вижу несколько разных способов сделать то, что мне нужно, и я сделал кучу поисков переполнения Google / стека, но не могу найти то, что я ищу.Мне нужно запустить несколько «таймеров обратного отсчета».Мне нужно иметь около 6, возможно, до 10 таймеров обратного отсчета, работающих одновременно в разное время.У меня есть панель вкладок в моей основной программе, в которую я включаю FXML и внедряю контроллеры.Вкладка «Таймеры» имеет контроллер, отличный от основной программы.
Итак, первый вопрос, который у меня есть.Поскольку эта «вкладка» работает на отдельном контроллере, но включена в основную программу, она запускается в отдельном потоке приложения?
Вот пример того, как выглядит включенная вкладка FXML ...
Когда я нажимаю каждую кнопку запуска.Я могу создать Timeline
и KeyFrame
для каждого таймера.Тем не менее, я не думаю, что это лучший способ сделать это.Особенно, если вы одновременно запускаете до 10 временных шкал, и определенно, если это не выполняется в отдельном потоке приложения из основной программы.
Я думал об отправке каждого запроса на запуск в ExecutorService
и newCacheThreadPool
, однако мне нужно иметь возможность обновлять метки в графическом интерфейсе с оставшимся текущим временем, и я понимаю, что вы не должны этого делатьс фоновыми услугами.Platform.runLater()
может быть?
Другая идея заключалась в использовании Timer
из класса java.util.Timer
.Тем не менее, я вижу, что возникают те же проблемы, что и ExecutorService
, когда мне нужно обновить метки графического интерфейса.Я также понимаю, что класс Timer
создает только один поток и выполняет свои задачи последовательно.Так что это не сработает.
Или, если у меня есть целый другой класс "CountDown", я могу создавать новые экземпляры для каждого из них, а затем запускать новые потоки. Однако, если я это сделаю,как мне постоянно обновлять графический интерфейс.Я все еще должен был бы опросить класс CountDown, используя timeline
правильно?Так что это победит цель всего этого.
Я просто застрял в лучшем способе сделать это, и, надеюсь, я не проголосую и не удалю тему, так как я не включил какой-либо код или оставил его слишком открытым для обсуждения.
Спасибо,