Я не уверен, возможно ли то, что я пытаюсь сделать. Но если у кого-то есть идеи, это было бы здорово.
Вот сценарий. Я пытаюсь выполнить задачу A с индикатором выполнения, показывающим прогресс, и после завершения задачи A я пытаюсь выполнить задачу B. Вот пример в коде:
private void func() {
// Task A
class CustomTask extends Task<Integer> {
@Override
protected Integer call() throws Exception {
for (int i = 0; i < 5; i++) {
try {
Thread.sleep(1000);
} catch (Exception e) {
e.printStackTrace();
}
updateProgress(i, 4);
}
return null;
}
}
// Executing Task A
// CustomProgressBar is a class I made that just binds the progress Property,
// And the progress bar appears to work.
CustomTask customTask = new CustomTask();
CustomProgressBar customProgressBar = new CustomProgressBar(customTask);
Thread thread = new Thread(customTask);
thread.start();
// Task B, For example, just a simple print statement
System.out.println("After task A is finished");
}
В этом примере я необходимо, чтобы задача B выполнялась после завершения задачи A. Однако я не могу использовать thread.join()
, потому что это заблокирует поток JavaFX, и индикатор выполнения не будет обновляться.
Есть ли способ выполнить sh это, не помещая задачу B в customTask.setOnSucceeded()
?