更新ObservableList时线程挂起

时间:2013-07-11 08:18:42

标签: java javafx

我正在开发一个javafx应用程序,它有一个ObservableList支持的ListView。

@FXML
private ListView<String> taggedQueriesResultsList;
private ObservableList<String> searchResultsList = FXCollections.observableArrayList();

ObservableList使用list.add("something")通过计划任务更新数据,例如Executors.newSingleThreadScheduledExecutor()。但是,计划任务从未在第一次运行后运行。 UI在第一次运行后更新。我注意到如果我注释掉行list.add("something"),任务会按计划定期运行。

我认为这是一些同步问题,但不确定。请帮助我了解正在发生的事情以及如何解决问题。

2 个答案:

答案 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);