#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.
Более глубокая причина заключается в слегка запутанном механизме удаления: ряд не удаляет сам элемент, а только помечает его как готовый к удалению. Затем он делегирует изменение своей диаграмме, которая затем вызывает обратно в серию, чтобы выполнить фактическое удаление. И этот механизм ломается, если диаграммы нет.
Реальные решения могут быть сложными извне, потому что все так плотно и тайно связано — нет способа подключить вашего собственного слушателя для фактического удаления. Если вам действительно нужно манипулировать (удалять элементы) рядом без прикрепленной диаграммы, вы можете попытаться реализовать фиктивную диаграмму и установить ее в ряд.