2017-07-19 64 views
0

我想創建布爾結合蛋白這樣的:BooleanBinding與根據元素

BooleanBinding binding = Bindings.createBooleanBinding(
      () -> (context.getService() == null 
        || context.getService().getCurrentFamily() == null), 
      context.serviceProperty(), context.getService().familyProperty()); 

但在初始化的時刻serviceProperty的值是零,所以我收到的NullPointerException上context.getService().familyProperty()

我怎麼能初始化此綁定。正確嗎?

+1

線的東西你有一個更根本的問題:綁定將只綁定到當前*服務的*'familyProperty'。如果服務發生變化(大概它可以,因爲你綁定到'context.serviceProperty()'),你仍然會被綁定到(舊的服務的'familyProperty()'),而不是新的服務的' familyProperty()'。因此,即使您使用NPE解決了問題,在服務更改後,對服務系列的更改也不會更新綁定。 –

+0

jeah ..你是對的..所以我必須初始化2聽衆聽。服務變化和家庭變化...... thx – VANILKA

回答

1

與標準的API,你可以做

BooleanBinding binding = Bindings.select(context.serviceProperty(), family).isNull(); 

這具有產生在標準輸出的警告如果該服務(在這個例子中)爲空,但它仍然會不顧這些警告正常工作的壞習慣。對於這些用例,我喜歡Tomas Mikula的EasyBindReactFX庫。例如,ReactFX 2.0,你可以做沿

ObservableValue<Boolean> binding = 
    Val.map(context.serviceProperty(), service -> service.familyProperty()) 
     .flatMap(family -> family.isNull());