gpt4 book ai didi

java - 创建元素包装器时的空指针

转载 作者:行者123 更新时间:2023-12-01 21:13:12 25 4
gpt4 key购买 nike

我正在尝试创建一个可编辑的 TreeTableView来自 XML 文档。为此,我将文档中的元素包装在一个类中。元素的数据存储在属性 key 和 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));

其中 current 是 XML 元素。此时我得到一个 NullPointerException为了 lib.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"));
}

因为这些初始化是在执行构造函数之前完成的:

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 .

关于java - 创建元素包装器时的空指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40767372/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com