我正在开发一个javafx应用程序,它有一个ObservableList支持的ListView。
@FXML
private ListView<String> taggedQueriesResultsList;
private ObservableList<String> searchResultsList = FXCollections.observableArrayList();
ObservableList使用list.add("something")
通过计划任务更新数据,例如Executors.newSingleThreadScheduledExecutor()
。但是,计划任务从未在第一次运行后运行。 UI在第一次运行后更新。我注意到如果我注释掉行list.add("something")
,任务会按计划定期运行。
我认为这是一些同步问题,但不确定。请帮助我了解正在发生的事情以及如何解决问题。
答案 0 :(得分:1)
确保始终从应用程序线程更新GUI。见http://docs.oracle.com/javafx/2/threads/jfxpub-threads.htm
对于线程安全的ObservableCollection,请参见此处:Fast performing and thread safe observable collection
答案 1 :(得分:0)
创建同步Observable列表的示例:
newSeries = new XYChart.Series<>();
ObservableList<XYChart.Data<Number, Number>> listaSerie;
listaSerie = FXCollections.synchronizedObservableList(FXCollections.observableList(new ArrayList<XYChart.Data<Number, Number>>()));
newSeries.setData(listaSerie);