是否存在與Java SwingWorker類相當的JavaFX?JavaFX SwingWorker Equivalent?
我知道JavaFX Task,但是您只能發佈String消息或進度。我只想在GUI線程中調用一個方法,就像我對SwingWorker所做的那樣(通過發佈任意類型的消息)。
繼承人是我的意思的例子:
class PrimeNumbersTask extends
SwingWorker<List<Integer>, Integer> {
PrimeNumbersTask(JTextArea textArea, int numbersToFind) {
//initialize
}
@Override
public List<Integer> doInBackground() {
while (! enough && ! isCancelled()) {
number = nextPrimeNumber();
publish(number);
setProgress(100 * numbers.size()/numbersToFind);
}
}
return numbers;
}
@Override
protected void process(List<Integer> chunks) {
for (int number : chunks) {
textArea.append(number + "\n"); // HERE: execute in GUI thread
}
}
}
解決方案
非常感謝你對你的答案。我正在尋找的解決方案是使用Platform.runLater(Runnable guiUpdater)。
我已經在想這個解決方案,但在我看來更像是一個解決方法(好吧,它適用於主要的例子,但不是在任何情況下)。 Platform.runLater()方法正是我所期待的。 – Crine
您剛剛創建了任務的新實例,並未啓動PrimeNumbersTask的任何後臺工作。我想有人需要把它放在一個線程上並啓動它。否則,如果你只是調用task.run()圖形用戶界面被阻止..我覺得可以添加缺失的行:new Thread(task).start();讓我知道如果這是好的 – Ewoks