我正在尝试在JavaFx的区域图表中显示数据。问题是整个程序在填充区域图表时会永久冻结(一旦数据在图表中可见,这种行为就不会停止)。
下面的代码显示了使用数据填充区域图表的功能。 'createChart'函数在后台线程中运行,并对所有UI命令使用“Platform.runLater”。
@FXML
private AreaChart<String, Number> mAreaChart;
public void createChart(String mainTitle, HashMap<Integer, String> chart_time, HashMap<Integer, Float> chart_data) {
try {
XYChart.Series<String, Number> series = new XYChart.Series<String, Number>();
for (int k = 0; k < chart_time.size(); k++) {
series.getData().add(new XYChart.Data<String, Number>(chart_time.get(k), chart_data.get(k)));
}
chart_time.clear();
chart_data.clear();
Platform.runLater(new Runnable() {
@Override
public void run() {
mAreaChart.setAnimated(false);
mAreaChart.setTitle(mainTitle);
mAreaChart.getXAxis().setLabel("Time");
mAreaChart.getYAxis().setLabel("Movement");
mAreaChart.getXAxis().setTickLabelRotation(45);
mAreaChart.setCreateSymbols(false);
mAreaChart.getData().clear();
mAreaChart.getData().add(series);
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
“.add(series);”命令导致问题。由于它已经在后台线程中发生并且只有一个JavaFX UI线程,我想知道如何阻止程序冻结?