Java 列表单元格updateItem()NullPointerException
我有一个JAVAFX程序,其中包含一个新闻列表。 我根据其严重性为每个新项目着色,并将其添加到ListView中 当我向列表中添加一个新的时,我收到一个NullPointerException 调试之后,我注意到updateItem()方法中作为参数得到的'item'对象为null。不知道为什么 以下是我的一些代码:Java 列表单元格updateItem()NullPointerException,java,listview,javafx,Java,Listview,Javafx,我有一个JAVAFX程序,其中包含一个新闻列表。 我根据其严重性为每个新项目着色,并将其添加到ListView中 当我向列表中添加一个新的时,我收到一个NullPointerException 调试之后,我注意到updateItem()方法中作为参数得到的'item'对象为null。不知道为什么 以下是我的一些代码: public void initializeListView(IntelligenceSource source){ newsListData =FXCollections
public void initializeListView(IntelligenceSource source){
newsListData =FXCollections.observableArrayList ();
for (IntelligenceNew news : source.getListOfNews())
newsListData.add(news);
newsList.setItems(newsListData);
newsList.setCellFactory(e -> new ListViewFormat());
}
ListView格式的内部类:
public class ListViewFormat extends ListCell<IntelligenceNew> {
@Override
protected void updateItem(IntelligenceNew item, boolean empty) {
super.updateItem(item, empty);
setText(item.getName());
switch (item.getSeverity()){
case 1: setTextFill(Color.GREEN);
break;
case 2: setTextFill(Color.ORANGE);
break;
case 3: setTextFill(Color.RED);
}
}
}
您必须管理一种情况,例如传递空值时会发生什么情况。
在这种情况下,您必须像下面那样修改代码。
public class ListViewFormat extends ListCell<IntelligenceNew> {
@Override
protected void updateItem(IntelligenceNew item, boolean empty) {
super.updateItem(item, empty);
if(item==null)
{
setText(null);
}
else
{
setText(item.getName());
switch (item.getSeverity())
{
case 1: setTextFill(Color.GREEN);
break;
case 2: setTextFill(Color.ORANGE);
break;
case 3: setTextFill(Color.RED);
}
} //else ends
}
}
公共类ListViewFormat扩展ListCell{
@凌驾
受保护的void updateItem(IntelligenceNew项,布尔值为空){
super.updateItem(项,空);
if(项==空)
{
setText(空);
}
其他的
{
setText(item.getName());
开关(item.getSeverity())
{
案例1:setTextFill(颜色为绿色);
打破
案例2:SettexFill(橙色);
打破
案例3:setTextFill(颜色为红色);
}
}//否则结束
}
}
这对我很有效,我也面临这个问题。对于没有任何数据的行,项为空。在使用
setText(item.getName())之前,只需对item
添加一个空检查代码>非常感谢您的帮助!它就像一个符咒。
public class ListViewFormat extends ListCell<IntelligenceNew> {
@Override
protected void updateItem(IntelligenceNew item, boolean empty) {
super.updateItem(item, empty);
if(item==null)
{
setText(null);
}
else
{
setText(item.getName());
switch (item.getSeverity())
{
case 1: setTextFill(Color.GREEN);
break;
case 2: setTextFill(Color.ORANGE);
break;
case 3: setTextFill(Color.RED);
}
} //else ends
}
}