gpt4 book ai didi

java - 列表单元格 updateItem() NullPointerException

转载 作者:行者123 更新时间:2023-11-30 07:32:39 26 4
gpt4 key购买 nike

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

当我向列表中添加新内容时,我收到 NullPointerException。

调试后,我注意到在 updateItem() 方法中作为参数获得的“item”对象为空。不明白为什么。

这是我的一些代码:

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

每次向源添加新内容时,我都会使用适当的源激活 InitializeListView 方法。

异常消息:

Exception in thread "JavaFX Application Thread" java.lang.NullPointerException
at GUI.MainWindowController$ListViewFormat.updateItem(MainWindowController.java:201)
at GUI.MainWindowController$ListViewFormat.updateItem(MainWindowController.java:197)
at javafx.scene.control.ListCell.updateItem(ListCell.java:480)
at javafx.scene.control.ListCell.access$300(ListCell.java:72)
at javafx.scene.control.ListCell$4.invalidated(ListCell.java:299)
at javafx.beans.property.ObjectPropertyBase.markInvalid(ObjectPropertyBase.java:111)
at javafx.beans.property.ObjectPropertyBase.set(ObjectPropertyBase.java:146)
at javafx.scene.control.ListCell.setListView(ListCell.java:305)
at javafx.scene.control.ListCell.updateListView(ListCell.java:494)
at com.sun.javafx.scene.control.skin.ListViewSkin.createCell(ListViewSkin.java:267)
at com.sun.javafx.scene.control.skin.ListViewSkin.lambda$new$369(ListViewSkin.java:89)
at com.sun.javafx.scene.control.skin.ListViewSkin$$Lambda$189/183721512.call(Unknown Source)
at com.sun.javafx.scene.control.skin.VirtualFlow.getCell(VirtualFlow.java:1771)
at com.sun.javafx.scene.control.skin.VirtualFlow.getCellLength(VirtualFlow.java:1872)
at com.sun.javafx.scene.control.skin.VirtualFlow.computeViewportOffset(VirtualFlow.java:2511)
at com.sun.javafx.scene.control.skin.VirtualFlow.layoutChildren(VirtualFlow.java:1189)
at javafx.scene.Parent.layout(Parent.java:1076)
at javafx.scene.Parent.layout(Parent.java:1082)
at javafx.scene.Parent.layout(Parent.java:1082)
at javafx.scene.Parent.layout(Parent.java:1082)
at javafx.scene.Parent.layout(Parent.java:1082)
at javafx.scene.Parent.layout(Parent.java:1082)
at javafx.scene.Scene.doLayoutPass(Scene.java:552)
at javafx.scene.Scene$ScenePulseListener.pulse(Scene.java:2397)
at com.sun.javafx.tk.Toolkit.lambda$runPulse$30(Toolkit.java:314)
at com.sun.javafx.tk.Toolkit$$Lambda$275/981231226.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.tk.Toolkit.runPulse(Toolkit.java:313)
at com.sun.javafx.tk.Toolkit.firePulse(Toolkit.java:340)
at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:525)
at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:505)
at com.sun.javafx.tk.quantum.QuantumToolkit.lambda$runToolkit$400(QuantumToolkit.java:334)
at com.sun.javafx.tk.quantum.QuantumToolkit$$Lambda$42/663212973.run(Unknown Source)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$145(WinApplication.java:101)
at com.sun.glass.ui.win.WinApplication$$Lambda$38/1882560110.run(Unknown Source)
at java.lang.Thread.run(Thread.java:745)

最佳答案

您必须处理类似传递空值的情况。
在这种情况下,您必须像下面这样更改代码。

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

这对我有用,我也遇到了这个问题。

关于java - 列表单元格 updateItem() NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35866865/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com