2016-11-23 10 views
0

XML 문서에서 편집 가능한 TreeTableView을 만들려고합니다. 이 들어, 내가 클래스 내에서 문서에서 요소 래핑입니다. 요소의 데이터는 속성 key 및 val 내에 저장됩니다. 내 래퍼 내가 트리 항목을 생성하고 현재는 XML 요소입니다Null 요소 래퍼 작성시 포인터

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

로 설정하는 재귀 알고리즘을 쓴

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; 
} 

로 구성되어 있습니다. 이 포인트에서 lib.ElementWrapper.<init>(ElementWrapper.java:21) 에 대한 NullPointerException은 위에 게시 된 Wrapper 클래스의 두 번째 줄입니다. 어떻게 올바르게 설정합니까? 이 초기화가 실행 costructor 전에 수행되기 때문에

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")); 
} 

:에

답변

3

변경을 여기

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

글쎄, 이것은 Null Pointer가있는 이유 인 것 같습니다. 문제는 지금 Attribute에서 원하는 값으로 설정되지 않는 요소입니다. 어쩌면 내가 왜 그들이 단지 초기 값을 보는지 알아 내야 만한다. – chenino

+0

@chenino 죄송합니다. 무엇이 잘못 되었습니까? –

+0

해결책을 이미 찾았으며 답을 수정하고 표시했습니다. 만약 내가 constructur의 마지막 값을 null로 설정한다면, 값은 트리 테이블에서 갱신되지 않을 것이다. 이것을 고쳤습니다. 이제 모든 것이 나를 위해 일하고 있습니다. 대단히 감사합니다. Andrii! – chenino