什么时候在 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
,为什么,因为 ListCell
的 this.getItem();
是 null
。像这样
//im in my constructor
BooleanProperty somechangingboolean= new SimpleBooleanProperty(getItem().message);
//that above line results in NPE.
那你是怎么做到的?因为我正在尝试监听 BooleanProperty
的 message
变量中发生的变化,我想在 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
}
});
猜对了..
关于问题的标题;假设我有一个自定义数据对象
public class Features {
BooleanProperty message = new SimpleBooleanProperty();
String name= "Java fx";
//etc etc
}
现在,当我创建我的 ListCell
,并在我的自定义单元格的 class 构造函数中做一些工作时,它指向 message
变量,或者我的数据类中的任何变量,我得到一个 NullPointerException
,为什么,因为 ListCell
的 this.getItem();
是 null
。像这样
//im in my constructor
BooleanProperty somechangingboolean= new SimpleBooleanProperty(getItem().message);
//that above line results in NPE.
那你是怎么做到的?因为我正在尝试监听 BooleanProperty
的 message
变量中发生的变化,我想在 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
}
});
猜对了..