0

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

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

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

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

4

2 回答 2

1

确保始终从应用程序线程更新 GUI。请参阅http://docs.oracle.com/javafx/2/threads/jfxpub-threads.htm

有关线程安全的 ObservableCollection,请参见此处:快速执行和线程安全的可观察集合

于 2013-07-11T08:27:44.157 回答
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);
于 2014-03-26T05:47:32.367 回答