2016-11-23 101 views
0

我試圖從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類的第二行。 我如何正確設置?

回答

3

將其更改爲:

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