如何清除JavaFX图中的所有数据?

时间:2014-07-02 12:54:04

标签: graph charts 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 个答案:

答案 0 :(得分:0)

技术原因是数据列表中的监听器中的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;
        }
    }
}

如果在图表为空时删除了某个项目,则会抛出下一个添加项。

更深层次的原因是稍微复杂的删除机制:系列不会删除项目本身,只会将其标记为准备删除。然后它将更改委托给其图表,然后调用回系列进行实际删除。如果没有图表,那么这种机制会中断。

真正的解决方案可能很难从外部解决,因为一切都是如此紧密和秘密编织 - 没有办法挂钩你自己的听众去做实际删除。如果您真的必须操作(删除项目)没有附加图表的系列,您可能会尝试实现虚拟图表并将其设置为系列。