Исключение нулевого указателя на StackedBarChart

Я пытаюсь отобразить StackedBarChart с Java FX (работает 1.7.0_45)

Я получаю следующее

java.lang.NullPointerException
    at javafx.scene.chart.StackedBarChart.getDataItem(StackedBarChart.java:500)
    at javafx.scene.chart.StackedBarChart.updateAxisRange(StackedBarChart.java:390)
    at javafx.scene.chart.XYChart.layoutChartChildren(XYChart.java:620)
    at javafx.scene.chart.Chart$1.layoutChildren(Chart.java:84)
    at javafx.scene.Parent.layout(Parent.java:1018)

Мой код ниже

public StackedBarChart<String, Number> createTreeNbChart() {
        String[] typeString = new String[TypeE.values().length];
        for (int i = 0; i < typeString.length; i++) {
            typeString[i] = TypeE.values()[i].toString();
        }
        final CategoryAxis xAxis = CategoryAxisBuilder
                .create()
                .label("Type")
                .categories(
                        FXCollections.<String> observableArrayList(typeString))
                .build();
        final NumberAxis yAxis = NumberAxisBuilder.create().label("Nb").build();

        List<Tree> didBurn = new ArrayList<Tree>();
        List<Tree> didGive = new ArrayList<Tree>();
        List<Tree> nothingYet = new ArrayList<Tree>();
        this.organizeTreesInto(didBurn, didGive, nothingYet);

        // Trees which did give
        ArrayList<StackedBarChart.Data<String, Number>> giveDataList = new ArrayList<>();
        for (TypeE type : TypeE.values()) {
            giveDataList.add(new StackedBarChart.Data<String, Number>(
                    type.toString(), this.treesFromListWithType(didGive, type)
                            .size()));
        }
        StackedBarChart.Series<String, Number> didGiveSeries = new StackedBarChart.Series<String, Number>(
                "ont donné",
                FXCollections.observableArrayList(giveDataList));

        // Trees which did burn
        ArrayList<StackedBarChart.Data<String, Number>> didBurnDataList = new ArrayList<>();
        for (TypeE type : TypeE.values()) {
            didBurnDataList.add(new StackedBarChart.Data<String, Number>(type
                    .toString(), this.treesFromListWithType(didBurn, type)
                    .size()));
        }
        StackedBarChart.Series<String, Number> didBurnSeries = new StackedBarChart.Series<String, Number>(
                "ont brûlé", FXCollections.observableArrayList(didBurnDataList));

        // Trees with nothing yet
        ArrayList<StackedBarChart.Data<String, Number>> nothingYetDataList = new ArrayList<>();
        for (TypeE type : TypeE.values()) {
            didBurnDataList.add(new StackedBarChart.Data<String, Number>(type
                    .toString(), this.treesFromListWithType(nothingYet, type)
                    .size()));
        }
        StackedBarChart.Series<String, Number> nothingYetSeries = new StackedBarChart.Series<String, Number>(
                "les autres",
                FXCollections.observableArrayList(nothingYetDataList));

        ObservableList<StackedBarChart.Series<String, Number>> barChartData = FXCollections
                .observableArrayList(didGiveSeries, didBurnSeries,
                        nothingYetSeries);
        final StackedBarChart<String, Number> chart = new StackedBarChart<String, Number>(
                xAxis, yAxis, barChartData);
        return chart;

Все выглядит хорошо для меня. Единственное, что на данный момент все мои списки данных пусты, поэтому ряды будут пустыми. Может быть, проблема связана с этим?

1 ответ

Решение

Я нашел проблему. Это была ошибка копирования-вставки в следующем коде

// Trees with nothing yet
        ArrayList<StackedBarChart.Data<String, Number>> nothingYetDataList = new ArrayList<>();
        for (TypeE type : TypeE.values()) {
            didBurnDataList.add(new StackedBarChart.Data<String, Number>(type
                    .toString(), this.treesFromListWithType(nothingYet, type)
                    .size()));
        }

Я добавлял вещи в didBurnDataList вместо nothingYetDataList, Следовательно nothingYetDataList всегда был пуст. Я не уверен, что это хорошая причина бросить NPE в любом случае, так как можно подумать о сценарии, в котором ряд столбчатой ​​диаграммы может быть пустым!

Другие вопросы по тегам