Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 列表单元格updateItem()NullPointerException_Java_Listview_Javafx - Fatal编程技术网

Java 列表单元格updateItem()NullPointerException

Java 列表单元格updateItem()NullPointerException,java,listview,javafx,Java,Listview,Javafx,我有一个JAVAFX程序,其中包含一个新闻列表。 我根据其严重性为每个新项目着色,并将其添加到ListView中 当我向列表中添加一个新的时,我收到一个NullPointerException 调试之后,我注意到updateItem()方法中作为参数得到的'item'对象为null。不知道为什么 以下是我的一些代码: public void initializeListView(IntelligenceSource source){ newsListData =FXCollections

我有一个JAVAFX程序,其中包含一个新闻列表。 我根据其严重性为每个新项目着色,并将其添加到ListView中

当我向列表中添加一个新的时,我收到一个NullPointerException

调试之后,我注意到updateItem()方法中作为参数得到的'item'对象为null。不知道为什么

以下是我的一些代码:

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
}
   }