2016-11-23 6 views
0

JavaFX 응용 프로그램을 코딩하고 있습니다. SceneBuilder 8.2로 GUI를 만들었습니다. 이미 ChoiceBox를 넣었지만 사용자 정의 유형이 아닌 Java 유형을 사용합니다. 그리고 잘 작동합니다. 그러나 사용자 정의 유형을 사용하면 choiceBox가 인스턴스화되지 않습니다. 이유가 무엇입니까? 코드 아래 :JavaFX 사용자 지정 ChoiceBox가 시작시 인스턴스화되지 않았습니다.

public class PelController { 
    //instanciation is OK 
    @FXML 
    private ChoiceBox<PeriodeEnum> fCalculInteret; 

    //not instanciated at launch 
    @FXML 
    private ChoiceBox<DureeChoiceBoxElement> duree; 

/** 
    * Initializes the controller class. This method is automatically called 
    * after the fxml file has been loaded. 
    */ 
    @FXML 
    private void initialize() { 
//fCalculInteret is NOT NULL, automatically instantiated at startup. 
fCalculInteret.valueProperty().bindBidirectional(pel.fCalculInteretProperty()); 
//duree is NULL causing NullPointerException 
duree.valueProperty().get().dureeProperty().bindBidirectional(pel.dureeProperty()); 
    } 
} 

사용자 정의 유형 :

public class DureeChoiceBoxElement extends ObservableValueBase<DureeChoiceBoxElement> { 

    private IntegerProperty duree; 

    public DureeChoiceBoxElement() { 

    } 

    public DureeChoiceBoxElement(int duree) { 
     this.duree = new SimpleIntegerProperty(duree); 
    } 

    public IntegerProperty dureeProperty() { 
     return duree; 
    } 

    public Integer getDuree() { 
     return duree.getValue(); 
    } 

    @Override 
    public DureeChoiceBoxElement getValue() { 
     // TODO Auto-generated method stub 
     return new DureeChoiceBoxElement(duree.get()); 
    } 

    public void setDuree(Integer duree) { 
     this.duree.setValue(duree); 
    } 

    @Override 
    public String toString() { 
     return duree + " an"; 
    } 

} 

당신은 왜이 NullPointer을 설명 할 수 있습니다. 감사합니다

답변

0
duree.valueProperty().get().dureeProperty().bindBidirectional(pel.dureeProperty());   

           |         |   

-> 널 (null)은 어쩌면이 방법 것으로 보인다 흠

|에서 온다 :

public IntegerProperty dureeProperty() { 
     return duree; 
} 

반환 기본 constructor에이 duree 속성을 초기화하지 않는 원인이 널 (null).


1) 하나의 솔루션에 방법을 수정하는 것입니다 :

//lazy 
public IntegerProperty dureeProperty() { 
     if(duree == null) //if duree has not been initialized 
     duree = new SimpleIntegerProperty(); 
     return duree; 
} 

또는 2) 당신은 private IntegerProperty duree; 속성을 초기화 기본 생성자을 변경할 수 있습니다, 솔루션 1이 더 있지만 .

+0

널 (NULL) 포인터 변수에서 온다 : 개인] 선택 duree; '.Try가 제공하는 하나의 코드를 교체하고 작동하지 않는 경우에 오류 스택 트레이스를 추가, 나는'개인 IntegerProperty의 duree을 의미 프랑수아 F. @ 기타] 선택 –

+0

같은 @FXML 주석을 넣어 반면 "duree은"NULL입니다 질문 : – GOXR3PLUS

+0

duree ChoiceBox에 대한 나의 실수, FXML 파일에 문제가있다. 하지만 당신에게 대답하기 위해 bindDirectional을 설정했는지보십시오. 이런 식으로 또 다른 IntegerProperty가 private IntegerProperty duree와 비교하여 올바른 DureeChoiceBoxElement 항목을 선택할 수있게하고 싶습니다. 값. 나는이 방법을 시도하고있다. 감사. –

0

내 문제는 나 자신 (실수)에 의해 해결되었다