Как я могу очистить все данные в графике JavaFX?

Я получаю это странное исключение и считаю, что это ошибка. Я пытаюсь очистить серию, которая содержит список точек для построения графика. Однако после очистки я хочу добавить новые данные, и это дает мне исключение нулевого указателя. Мой код:

public static void main(String[] args) {
        Series<String, Number> series = new Series<String, Number>();
        Number value1 = new Integer(5);
        Number value2 = new Integer(6);
        Data<String, Number> point1 = new Data<String, Number>("Something", value1);
        Data<String, Number> point2 = new Data<String, Number>("Something", value2);
        series.getData().add(point1);
        series.getData().add(point2);

        series.getData().clear();

        Number value3 = new Integer(7);
        Data<String, Number> point3 = new Data<String, Number>("Something", value3);
        **series.getData().add(point3);**
    }

Я получаю исключение нулевого указателя в отмеченной строке кода. Мне просто нужен способ сбросить эту серию, но для меня это похоже на ошибку в JavaFX. Я использую Java 8, которая имеет JavaFX в качестве интеграции.

Кто-нибудь может мне помочь?

1 ответ

Техническая причина - NPE в слушателе в списке данных, установленном сериями:

if (c.getAddedSize() > 0) {
    for (Data<X,Y> itemPtr = begin; itemPtr != null; itemPtr = itemPtr.next) {
        if (itemPtr.setToRemove) {
            getChart().dataBeingRemovedIsAdded(itemPtr, Series.this);
            itemPtr.setToRemove = false;
        }
    }
}

Это добавит следующее добавление, если элемент был удален, когда диаграмма пуста.

Более глубокая причина - слегка запутанный механизм удаления: серия не удаляет сам элемент, а только отмечает его как готовый к удалению. Затем он делегирует изменение в свою диаграмму, которая затем вызывает обратно в серию для фактического удаления. И этот механизм ломается, если нет графика.

Реальные решения могут быть трудными извне, потому что все так тесно и тайно сплетено - нет никакого способа зацепить вашего собственного слушателя для фактического удаления. Если вам действительно нужно манипулировать (удалять элементы) сериями без прикрепленной диаграммы, вы можете попытаться создать фиктивную диаграмму и установить ее для этой серии.

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