将数据添加到区域图表时,JavaFx程序会冻结

时间:2017-10-08 17:57:00

标签: java multithreading javafx charts

我正在尝试在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线程,我想知道如何阻止程序冻结?

0 个答案:

没有答案