关于创建元素包装器的空指针
Null Pointer on creating an Element Wrapper
我正在尝试从 XML 文档创建可编辑的 TreeTableView
。
为此,我将文档中的元素包装在 class 中。
元素的数据存储在属性键和值中。
我的包装器包括
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 元素。在这一点上,我得到一个 NullPointerException
lib.ElementWrapper.<init>(ElementWrapper.java:21)
这是上面发布的 Wrapper
class 的第二行。
我该如何正确设置?
改为:
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"));
}
因为这些初始化是在执行构造函数之前完成的:
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.
我正在尝试从 XML 文档创建可编辑的 TreeTableView
。
为此,我将文档中的元素包装在 class 中。
元素的数据存储在属性键和值中。
我的包装器包括
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 元素。在这一点上,我得到一个 NullPointerException
lib.ElementWrapper.<init>(ElementWrapper.java:21)
这是上面发布的 Wrapper
class 的第二行。
我该如何正确设置?
改为:
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"));
}
因为这些初始化是在执行构造函数之前完成的:
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.