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

#graph #charts #javafx #javafx-2 #javafx-8

#График #Диаграммы #javafx #javafx-2 #javafx-8

Вопрос:

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

 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. для меня это похоже на ошибку: слушатель последовательно предполагает, что диаграмма ! = null

Ответ №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;
        }
    }
}
  

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

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

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