2014-10-20 1 views
1

나는 그리폰 세계로 진출하고 있으며, 다운로드 한 작은 lazybones 응용 프로그램에 오류가 발생했습니다. 내 생각은 그렇게 보입니다. Gradle을 사용한 후Griffon-JavaFX : View가 모델에 관한 NPE를 던졌습니다.

@ArtifactProviderFor(GriffonView) 
class PennyPackerView { 
FactoryBuilderSupport builder 
PennyPackerController controller 
PennyPackerModel model 

void initUI() { 
    builder.application(title: application.configuration['application.title'], 
     sizeToScene: true, centerOnScreen: true, name: 'mainWindow') { 
     scene(fill: WHITE, width: 200, height: 60) { 
      gridPane { 
       label(id: 'clickLabel', row: 0, column: 0, 
         text: bind(model.clickCount)) 
       button(row: 1, column: 0, prefWidth: 200, 
         controller.click()) 
      } 
     } 
    } 
} 

}

: 실행, 그것은 내 모델이 적어도 바인딩이 일어나는 시간에 주입되지 않고 있다고 생각하는 날 리드 오류가 발생합니다.

Warning, could not locate neither a JavaFX property nor a JavaBean property for class   
javafx.scene.control.Label, property: '0' 
[2014-10-20 13:30:56,166] [JavaFX Application Thread] 
    ERROR griffon.core.GriffonExceptionHandler  
    - Uncaught Exception 
java.lang.NullPointerException: Cannot bind to null 
at javafx.beans.property.StringPropertyBase.bind(StringPropertyBase.java:161) 
at javafx.beans.property.Property$bind.call(Unknown Source) 
at groovyx.javafx.factory.FXHelper$__clinit__closure26.doCall(FXHelper.groovy:454) 

다음은 매우 복잡한 모델 코드입니다.

@ArtifactProviderFor(GriffonModel) 
class PennyPackerModel { 
    @FXObservable String clickCount = "0" 
} 

이 NPE가 던져진 이유 또는 다른 문제에 대한 도움을 주시면 감사하겠습니다. 나는 lazybones에서 얻은 것이 griffon-javafx-groovy 시작 앱이라고 생각합니다.

EDIT : 디버깅 중이므로 모델을 삽입하는 것처럼 보이지만 바인딩을 설정할 때 문제가 발생합니다. StringPropertyBase 클래스에서 전달되는 newObservable의 값은 null입니다.

public void bind(ObservableValue<? extends String> newObservable) { 
    if (newObservable == null) { 
     throw new NullPointerException("Cannot bind to null"); 
    } 

나는 이런 일이 왜 모르거나 그것을 해결하는 방법 = (

답변

0

문제는 그것이 있어야 다음 줄

text: bind(model.clickCount)) 

입니다

text: bind(model.clickCountProperty)) 

첫 번째 값은 일반 값을 반환하고 두 번째 값은 JavaFX 속성을 반환합니다.이 문제는 빠른 grep로 발견되었습니다. 출처는 다음을 산출합니다.

$ grep clickCount -r griffon-javafx-* | grep bind 
griffon-javafx-groovy-templates/templates/griffon-javafx-groovy/griffon-app/views/View.groovy:       text: bind(model.clickCountProperty())) 
griffon-javafx-groovy-templates/templates/subtmpl-artifact/View.groovy:       text: bind(model.clickCountProperty())) 
griffon-javafx-java-templates/templates/griffon-javafx-java/griffon-app/views/View.java:  model.clickCountProperty().bindBidirectional(clickLabel.textProperty()); 
griffon-javafx-java-templates/templates/subtmpl-artifact/View.java:  model.clickCountProperty().bindBidirectional(clickLabel.textProperty()); 
관련 문제