我們有一個java程序,它接收一個CSV文件並將其處理成多組數據。數據在帶有組合框的XYChart上一次顯示一個以在它們之間進行選擇。然而,我們仍然遇到更新/更改數據的問題:JavaFX圖表:切換系列數據的正確方法
首先,我們爲每個數據系列有一堆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
版來我們得到在事件期間出現空指針異常,這表明某種競爭條件。
問題:
- 什麼是正確什麼改變一系列一個JavaFX圖表顯示?
- 有沒有辦法'暫停'onChanged事件,以便整個數據系列可以在圖表嘗試重繪之前更新。
您是否正在創建自己的線程,或者您是否始終使用JavaFX系統提供的應用程序線程?您是將JavaFX和Swing混合在一起還是純JavaFX應用程序?你可以提供一個[mcve](http://stackoverflow.com/help/mcve)來複制你的問題嗎?你使用的是什麼版本的JavaFX和OS?所有機器是否都使用完全相同的JavaFX版本並運行相同的操作系統? – jewelsea
請提供演示問題的SSCCE – kleopatra
@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. – geometrikal