是否存在与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