创建元素包装的空指针

问题描述:

我试图从XML文档创建可编辑的TreeTableView。 为此,我在一个类中包装文档中的元素。 元素的数据存储在属性键和val中。 我的包装由创建元素包装的空指针

private Element node; 

private final StringProperty key = new SimpleStringProperty(this, node.getAttribute("key"), "temp"); 
private final StringProperty val = new SimpleStringProperty(this, node.getAttribute("val"), "temp"); 

public ElementWrapper(Element n){ 
    System.out.println("creating element "+n.getNodeName()); 
    node = n; 
} 
public String getKey(){ 
    return key.get(); 
} 
@Override 
public String getVal(){ 
    return key.get(); 
} 
public void setKey(String key){ 
    ((Element)node).setAttribute("key", key); 
} 
@Override 
public void setVal(String value){ 
    ((Element)node).setAttribute("val", value); 
} 
@Override 
public Element getElement(){ 
    return node; 
} 
@Override 
public StringProperty keyProperty(){ 
    return key; 
} 
@Override 
public StringProperty valProperty(){ 
    return val; 
} 

我写了一个递归算法创建树项目,并将它们与

TreeItem<NodeWrapper> newsub = new TreeItem<>(new ElementWrapper(current)); 

,其中电流的XML元素。在这一点,我得到NullPointerExceptionlib.ElementWrapper.<init>(ElementWrapper.java:21) 这是上面张贴的Wrapper类的第二行。 我如何正确设置?

将其更改为:

private Element node; 

private final StringProperty key; 
private final StringProperty val; 

public ElementWrapper(Element n){ 
    System.out.println("creating element " + n.getNodeName()); 
    node = n; 
    key = new SimpleStringProperty(this, node.getAttribute("key")); 
    val = new SimpleStringProperty(this, node.getAttribute("val")); 
} 

因为这些初始化都执行costructor之前完成:

private final StringProperty key = new SimpleStringProperty(this, node.getAttribute("key"), "temp"); 
private final StringProperty val = new SimpleStringProperty(this, node.getAttribute("val"), "temp"); 

这里是关于初始化有趣的问题:Java order of Initialization and Instantiation
官方文档:Initializing Fields

+0

好吧,这似乎是与空指针的原因,只有问题,我现在得到的是元素不会被设置与所需的属性值。也许我要弄清楚为什么他们只看到初始值 – chenino

+0

@chenino对不起,你能提供更多细节有什么问题吗? –

+0

已经找到了解决方案,对您的答案进行了编辑并标记了它。如果我将构造器的最后一个值设置为null,则值不会在树表上更新。解决这个问题,现在everythign正在为我工​​作。 非常感谢Andrii! – chenino