Светлый фон

 

 

Граф сцены JavaFX, представляющий графический пользовательский интерфейс приложения JavaFX, не является потокобезопасным и может быть доступен и изменен только из потока пользовательского интерфейса JavaFX Application Thread.

Реализация долго выполняющихся задач в потоке приложения JavaFX неизбежно делает пользовательский интерфейс приложения невосприимчивым.

Поэтому лучшей практикой является выполнение этих задач на одном или нескольких фоновых потоках и использование потока приложения JavaFX для обработки пользовательских событий.

Работу с фоновыми потоками пакет concurrent обеспечивает с помощью двух абстрактных классов Task и Service, реализующих интерфейс Worker.

Интерфейс Worker определяет объект, который выполняет некоторую работу в одном или нескольких фоновых потоках.

Состояние объекта Worker является наблюдаемым и может использоваться из потока приложения JavaFX.

Жизненный цикл объекта Worker определяется следующим образом.

При создании объект Worker находится в состоянии READY.

При планировании работы объект Worker переходит в состояние SCHEDULED.

После этого, когда объект Worker выполняет работу, его состояние становится RUNNING.

Даже когда объект Worker немедленно запускается без планирования, он сначала переходит в состояние SCHEDULED, а затем в состояние RUNNING.

Состояние объекта Worker, которое завершается успешно, является SUCCEEDED, а свойство value установлено как результат этого объекта Worker.

В противном случае, если во время выполнения объекта Worker выбрасываются какие-либо исключения, его состояние становится FAILED, а для свойства исключения устанавливается тип произошедшего исключения.

В любое время, до завершения объекта Worker разработчик может прервать его, вызвав метод cancel, который помещает объект Worker в состояние CANCELED.

Прогресс работы, выполняемый объектом Worker, может быть получен с помощью трех различных свойств, таких как totalWork, workDone и progress.

Абстрактный класс Task расширяет класс java.util.concurrent. FutureTask, и конкретные реализации абстрактного класса Task должны переопределять его метод call, вызываемый средой выполнения в фоновом потоке.