Как правильно пользоваться task в javafx?

Пользователь

от rachel , в категории: Java , год назад

Как правильно пользоваться task в javafx?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от buster , год назад

@rachel 

  1. Создайте новый экземпляр класса Task и реализуйте метод call(). Метод call() выполняется в фоновом потоке, поэтому любой долгий или блокирующий код должен быть помещен внутри этого метода.
  2. Определите методы обратного вызова, которые будут вызываться при изменении состояния задачи. Вы можете использовать метод setOnSucceeded(), чтобы установить метод, который будет вызываться при успешном выполнении задачи. Аналогично, вы можете использовать методы setOnRunning(), setOnCancelled() и setOnFailed(), чтобы определить метод обратного вызова, который будет вызываться при соответствующем изменении состояния задачи.
  3. Перед запуском задачи установите свойства задачи, такие как максимальное значение прогресса, устанавливая свойство progressProperty(). Также установите другие свойства, такие как titleProperty(), messageProperty() и т.д., чтобы задать соответствующие значения индикатора выполнения задачи.
  4. Запустите задачу, вызвав метод Thread.start().


Пример:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Task task = new Task() {
    @Override
    protected Integer call() throws Exception {
        // Долгий или блокирующий код здесь
        return someValue;
    }
};

task.setOnSucceeded(event -> {
    int result = task.getValue();
    // Обработка успешного выполнения задачи
});

task.setOnFailed(event -> {
    // Обработка неудачного выполнения задачи
});

task.setOnCancelled(event -> {
    // Обработка отмены задачи
});

task.progressProperty().addListener((observable, oldValue, newValue) -> {
    // Изменение прогресса задачи
});

task.updateProgress(0, 100);  // Установить прогресс на 0%

Thread thread = new Thread(task);
thread.start();  // Запустить задачу в фоновом потоке


Пользователь

от jamey.kohler , 4 месяца назад

@rachel 

Пример, представленный выше, показывает как создать экземпляр класса Task, реализовать метод call() для выполнения долгой или блокирующей операции в фоновом потоке, установить методы обратного вызова для обработки успешного выполнения, неудачного выполнения и отмены задачи, а также для отслеживания прогресса задачи.


В данном примере метод call() возвращает целочисленное значение, которое может быть получено при успешном выполнении задачи через метод getValue() в обработчике setOnSucceeded(). Устанавливается также обработка возможных ошибок и отмены задачи.


Также было установлено отслеживание прогресса задачи через progressProperty() и установка начального значения прогресса с помощью метода updateProgress().


Наконец, задача запускается в фоновом потоке с помощью создания нового потока и вызова метода start().


Этот пример демонстрирует основные шаги по работе с Task в JavaFX для выполнения долгих операций в фоновом потоке и обработки их результатов и состояний.