Я пытаюсь периодически запускать в фоновом потоке приложения JavaFX, который изменяет некоторые свойства GUI.
Я думаю, что знаю, как использовать Task
и Service
классы из javafx.concurrent
, и не могу понять, как запустить такую периодическую задачу без использования Thread#sleep()
метода. Было бы неплохо, если бы я мог использовать Executor
из Executors
фабричных методов (Executors.newSingleThreadScheduledExecutor()
)
Я пытался запускать Runnable
каждые 5 секунд, что перезапускает javafx.concurrent.Service
, но сразу же зависает, когда service.restart
или даже service.getState()
вызывается.
Итак, наконец, я использую Executors.newSingleThreadScheduledExecutor()
, который запускает мой Runnable
каждые 5 секунд, и Runnable
запускает еще один Runnable
, используя:
Platform.runLater(new Runnable() {
//here i can modify GUI properties
}
Это выглядит очень противно :( Есть ли лучший способ сделать это, используя Task
или Service
классы?