【发布时间】:2016-05-11 15:59:51
【问题描述】:
我们有一个 java 程序,它接收一个 CSV 文件并将其处理成多组数据。数据在 XYChart 上一次显示一个,并带有一个可供选择的组合框。但是,我们不断遇到更新/更改数据的问题:
首先,每个数据系列都有一堆 ObservableList 对象,例如
ObservableList<XYChart.Data<T,V>> data = FXCollections.observableArrayList();
,每当更改选择框选择时,我们都会清除该系列,并添加与不同选择相对应的系列,例如
theChart.getData().clear();
theChart.getData().add(new XYChart.Series<T,V>(data));
但是,当 data 更新时,我们会收到错误,说明有关将相同数据添加到多个图表的内容。我认为如果事先为同一个data 调用了两次theChart.getData().add(new XYChart.Series<T,V>(data));,就会发生这种情况。
所以我把它包起来
XYChart.Series<T,V> series = new XYChart.Series<>(data);
并更改图表数据,如:
theChart.getData().clear();
theChart.getData().add(series);
在我的计算机上运行良好,但在另一台计算机上,当data 被清除然后added 到seriesonChanged 事件期间我们得到一个空指针异常,这表明某种竞争条件。
问题:
- 更改 JavaFX 图表显示的系列的正确方法是什么?
- 有没有办法“暂停”onChanged 事件,以便在图表尝试重绘之前更新整个数据系列。
【问题讨论】:
-
您是在创建自己的线程,还是一直在使用 JavaFX 系统提供的应用程序线程?您是在混合 JavaFX 和 Swing 还是纯 JavaFX 应用程序?你能提供一个mcve 来复制你的问题吗?您使用的是什么版本的 JavaFX 和操作系统?是否所有机器都使用完全相同的 JavaFX 版本并运行相同的操作系统?
-
请提供证明问题的SSCCE
-
@jewelsea 1. 使用 Platform.runLater 从另一个线程调用更新图表 2. 纯 JavaFX 3. 我将尝试创建一个 mcve 4. javafx.runtime.version=8.0.20, OS = OS X 10.10, java version=build 1.8.0_20-b26 5. 应该是相同的java版本,出错的机器是旧版本的OS X。
-
我必须等到星期一才能创建 mcve,因为另一台计算机正在工作,但感谢您的建议。
标签: javafx-8