【发布时间】:2011-08-24 12:27:28
【问题描述】:
我无法从 jcombobox 中删除第一个元素。我的代码如下,
JComboBox cBox= cBox= new JComboBox();
...
while (cBox.getItemCount() > 0)
cBox.removeItemAt(0);
对于测试运行,我在 cBox 中有 3 个项目。当它到达 removeItemAt(0) 时,调试变得混乱,进入了一些绝对不相关的文件访问代码。这样做两次然后得到以下异常。我尝试了直接得到相同异常的 removeAllItems() 。但是, removeItem(1) 可以正常工作,直到只剩下 1 个元素。该异常不会使应用程序崩溃,之后我在组合框中看不到任何项目,因此它工作了一点。我到底做错了什么。
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at util.Gui$4.actionPerformed(Gui.java:111)
at javax.swing.JComboBox.fireActionEvent(Unknown Source)
at javax.swing.JComboBox.contentsChanged(Unknown Source)
at javax.swing.AbstractListModel.fireContentsChanged(Unknown Source)
at javax.swing.DefaultComboBoxModel.setSelectedItem(Unknown Source)
at javax.swing.DefaultComboBoxModel.removeElementAt(Unknown Source)
at javax.swing.JComboBox.removeItemAt(Unknown Source)
at util.Gui.prepareSubLists(Gui.java:164)
at util.Gui$3.actionPerformed(Gui.java:97)
at javax.swing.JComboBox.fireActionEvent(Unknown Source)
at javax.swing.JComboBox.setSelectedItem(Unknown Source)
at javax.swing.JComboBox.setSelectedIndex(Unknown Source)
at javax.swing.plaf.basic.BasicComboPopup$Handler.mouseReleased(Unknown Source)
at java.awt.AWTEventMulticaster.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at javax.swing.plaf.basic.BasicComboPopup$1.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
【问题讨论】:
-
如果你把你的实际代码放在这里会很有用。这可能是 mre 所说的 while 条件,或者是导致某处 NPE 的任何其他问题!
-
问题出在您未显示的代码中,请参阅堆栈跟踪的第一行:
at util.Gui$4.actionPerformed(Gui.java:111) -
我必须添加一个空白项目,然后删除其余的。似乎无法从组合框项目中删除所有项目。
-
再次:最有可能的问题是 not 删除项目(无论它们是什么,默认组合都经过了足够好的测试 - 被 15 岁以上的开发人员军团使用应该保证,我们同意吗?)。取而代之的是 Gui.java 第 111 行有问题。不要添加随机黑客,深入挖掘并理解原因......
-
removeItemAt(0) 也会触发事件 actionPerformed() 并且有时用户将代码放在这里,它指的是不幸在几毫秒前被删除的项目。在@kleopatra 下方查看更详细的分析器