Здесь мы создаем индикатор и кнопку.
В обработчике нажатия кнопки мы создаем фоновую задачу, в методе call которой мы вызываем метод updateProgress, передавая прогресс выполнения задачи.
В методе updateProgress мы обновляем индикатор.
Дальше мы запускаем задачу с помощью объекта Service.
И создаем вторую кнопку для сброса индикатора.
Если возникает потребность обновлять JavaFX компоненты в методе call задачи Task, можно использовать метод Platform.runLater с объектом Runnable, в методе run которого обращаться к JavaFX компонентам.
Класс ScheduledService расширяет класс Service, обеспечивая автоматический перезапуск фоновой задачи после успешного выполнения, и при некоторых условиях перезапуск даже в случае сбоя.
При создании объект ScheduledService находится в состоянии READY.
После вызова метода start или restart объект ScheduledService переходит в состояние SCHEDULED на время, указанное свойством delay.
В состоянии RUNNING объект ScheduledService выполняет свою задачу.
По завершении задачи объект ScheduledService переходит в состояние SUCCEEDED, затем в состояние READY, а затем возвращается в состояние SCHEDULED.
Продолжительность пребывания в состоянии SCHEDULED зависит от времени последнего перехода в состояние RUNNING, текущего времени и значения свойства period, которое определяет минимальное время между двумя последовательными прогонами.
Если предыдущее выполнение завершено до истечения значения свойства period, то объект ScheduledService остается в состоянии SCHEDULED до истечения значения свойства period.
В противном случае, если предыдущее выполнение заняло больше времени, чем указанное значения свойства period, объект ScheduledService мгновенно переходит в состояние RUNNING.