我们有一个java程序,它接受一个CSV文件并将其处理成多组数据。数据在XYChart上一次显示一个,使用ComboBox在它们之间进行选择。但是,我们一直遇到更新/更改数据的问题:
首先,我们为每个数据系列都有一堆ObservableList对象,例如
ObservableList<XYChart.Data<T,V>> data = FXCollections.observableArrayList();
并且每当改变ChoiceBox选择时,我们将清除该系列并添加对应于不同选择的系列,例如
theChart.getData().clear();
theChart.getData().add(new XYChart.Series<T,V>(data));
但是,当data
更新时,如果将相同数据添加到多个图表中,我们会收到错误。我认为如果theChart.getData().add(new XYChart.Series<T,V>(data));
之前已为同一data
调用了两次,就会发生这种情况。
所以我把它包起来像
XYChart.Series<T,V> series = new XYChart.Series<>(data);
并更改了图表数据,如:
theChart.getData().clear();
theChart.getData().add(series);
在我的计算机上工作正常,但在data
被清除然后add
时我们会在series
onChanged
事件期间获得空指针异常,这表明某种竞争条件。
问题:
答案 0 :(得分:1)
你不能做clear()
,会抛出UnsupportedOperationException
。更新图表的正确方法是设置一个新的空ObservableList
,然后将新的XYChart.Series
添加到正确的XYChart.Data
个对象中。
chart.setData(FXCollections.observableArrayList());
XYChart.Series<T, V> series = new XYChart.Series<T, V>();
XYChart.Data<T, V> data = new XYChart.Data<T, V>(t_type_Value, v_type_Value);
series.getData().add(data);
chart.getData().add(series);