什么时候在 Initialisation without Exceptions 中调用 ListCell 的 getItem

When to call ListCell's getItem in Initialisation without Exceptions

关于问题的标题;假设我有一个自定义数据对象

public class Features {
 BooleanProperty message = new SimpleBooleanProperty();
 String name= "Java fx";
 //etc etc
 }

现在,当我创建我的 ListCell,并在我的自定义单元格的 class 构造函数中做一些工作时,它指向 message 变量,或者我的数据类中的任何变量,我得到一个 NullPointerException,为什么,因为 ListCellthis.getItem();null。像这样

//im in my constructor
BooleanProperty somechangingboolean= new SimpleBooleanProperty(getItem().message);
//that above line results in NPE.

那你是怎么做到的?因为我正在尝试监听 BooleanPropertymessage 变量中发生的变化,我想在 ListCell 中进行,但是我的构造函数 evaluates/computes 在数据设置之前,可能称为在 updateItem(T item, boolean empty)StarEdit().. 中,我不想在那里调用代码,我也不想添加 && 删除侦听器,分配 && 使诸如习惯之类的东西无效..

这里有什么方法可以摆脱 NullPointerException

天啊!!,我刚刚找到了解决方案,所以我可能会继续 post 它,对吧?对.. 答案是在我的 itemProperty() 和 post 那里的其余构造函数代码上添加一个监听器,非常简单,就像这样 -(Whosebug 要求)

//in my constructor
this.itemProperty().addListener(new ChangeListener<Features>() {

  @Override
  public void changed(ObservableValue<? extends Features> observable,
                 Features oldValue, Features newValue) {
    System.out.println("newvalue set");
    if(newValue != null)                
        somechangingboolean.bind(getItem().message);
        // now im ok, and the rest comes in
    }
});

猜对了..