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