绑定中的NullPointerException

时间:2017-09-08 19:34:18

标签: javafx

您好我想根据其他对象绑定一个值。此对象为null,默认情况下将设置该值。但我仍然收到NullPointerException。我希望它会被“.then(...)”捕获。但事实并非如此

    relationType.bind(Bindings.when(Bindings.createBooleanBinding(() -> ( relation == null || relation.get()== null), relation))
            .then(RelationType.NEUTRAL)
            .otherwise(relation
                    .get()
                    .typeProperty()));

当我向Listener内容添加绑定时,一切正常:

    relation.addListener((observable, oldValue, newValue) -> {

    if(newValue != null) {
        relationType.bind(Bindings
                .when(relation.isNull())
                .then(RelationType.NEUTRAL)
                .otherwise(newValue.typeProperty()));
    } else {
        relationType.unbind();
        relationType.setValue(RelationType.NEUTRAL);
    }

});

但我更喜欢只有约束力。那可能吗?

1 个答案:

答案 0 :(得分:2)

问题是评估relation.get().typeProperty()的时间。它在创建绑定时进行评估,而不是每次relation更改时进行评估。您可以使用选择绑定解决此问题,但您将使用此方法在控制台中收到警告:

relationType.bind(Bindings.when(relation.isNull())
            .then(RelationType.NEUTRAL)
            .otherwise(Bindings.select(relation, "type"));