0
JavaFX的UI节点,如果我注册一个事件处理程序:了JavaFx任务事件处理程序中处理该线程
final MenuItem buyItem = new MenuItem("Buy");
buyItem.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
String symbol = row.getItem().getSymbol();
String instrumentID = row.getItem().getInstrumentID();
.....
}
);
我可以假设代码中handle()
总是在JavaFX应用程序线程中执行,所以没有必要将它们包裹在Platform. runLater
内。
但是,当我与javafx.concurrent.Task
工作:
import javafx.concurrent.Task;
public class BuyTask extends Task<Map<String, Object>> {
......
}
BuyTask buyTask = new BuyTask(this.api, params);
Thread buyThread = new Thread(buyTask);
buyThread.start();
buyTask.setOnSucceeded(new EventHandler<WorkerStateEvent>() {
@Override
public void handle(final WorkerStateEvent workerStateEvent) {
Map<String, Object> result = (Map) workerStateEvent.getSource().getValue();
.......
Platform.runLater(new Runnable() {
@Override public void run() {
portfolioService.restart();
}
});
}
}
在哪个线程任务的事件处理程序的执行?由于我需要做的perform restart on a javafx.concurrent.ScheduledService -> portfolioService.restart()
其中提到必须在JavaFX应用程序线程中完成,我把它包装在Platform.runLater
内。
但是它是必需的吗?此任务事件处理程序是否总是在JavaFX应用程序线程中执行?谢谢!
很酷,谢谢你的回答! :) –
@firephil - 请仔细阅读这个问题和例子。这个问题是关于'onSucceeded'和'onFailed'事件的,'Task'类总是在JavaFX UI线程上调用。 “任务”文档中的示例在该任务的主逻辑内部发生变化,而不是“onSucceeded”或“onFailed”事件处理程序。 – Itai