我需要从下拉列表框删除从组合框中的所有项目中的Java
int itemCount = combo.getItemCount();
for(int i=0;i<itemCount;i++){
combo.removeItemAt(0);
}
删除所有项目此代码将删除所有项目除了最后一个。它给出了一个NullPointerException。 如何解决这个问题?
我需要从下拉列表框删除从组合框中的所有项目中的Java
int itemCount = combo.getItemCount();
for(int i=0;i<itemCount;i++){
combo.removeItemAt(0);
}
删除所有项目此代码将删除所有项目除了最后一个。它给出了一个NullPointerException。 如何解决这个问题?
问题中的代码正常工作。但是,它看起来像是一个线程问题。另一个线程可能会弄乱项目。
不过,我sugeest你应该更好地使用removeAllItems();
方法:
combo.removeAllItems();
+1,因为这是更好的解决方案。虽然它不能解释为什么OP会得到一个'NullPointerException'......) – brimborium
问题中的代码通常会工作。但是,它看起来像是一个线程问题。另一个线程可能会弄乱项目。 –
不要向我解释这一点,向OP解释它(即将它包含在你的答案中^^)。 – brimborium
使用.removeAllItems()方法从组合框中删除所有项目。
@RomanC为什么使用removeAll ... thingy没有帮助? –
假设它与另一个线程相关并不总是对的。它可能是导致问题的线程本身。
可能会发生此异常,因为当组合项目被删除时触发事件,并且在此事件处理方法中仍引用组合框项目。例如,当您在代码中删除某处(actionPeformed()除外)中的最后一个项目时,combo.removeItemAt(0)或removeAllItems()组合框中的最后一个项目仍然会被触发/执行。但通常actionPerformed()方法包含对用户操作作出反应的代码(用户在组合框某处单击)。因此,当最后一个项目被删除时,组合框中没有更多项目,并且对actionPerformed()中的项目或索引的任何引用都将导致异常。
对此的解决方案是将代码从actionPerformed()移动到例如mouseClicked()或另一个事件处理程序,具体取决于你想要做什么。
removeAllItems()它删除所有事情,但将数据添加到组合框后,它不会出现在那里,nullPointException将显示
使用此功能可以删除所有从组合框中的元素:
DefaultComboBoxModel model = (DefaultComboBoxModel) ComboBox.getModel();
model.removeAllElements();
在第二行:
combo.removeItemAt(0)
;我觉得应该是i
而不是0
。
做到以相反的顺序为:
for(int i=combo.getItemCount()-1;i>=0;i--){
combo.removeItemAt(i);
}
但在我的情况下combo.removeAllItems()
正常工作
通常它发生,因为你有一个事件相关联的JComboBox。当我运行它自己
jComboBoxExample.addActionListener (new ActionListener() {
public void actionPerformed (ActionEvent e) {
do_run();
}
});
public void do_run() {
int n=jComboBoxPerfilDocumentos.getItemCount(); <--THIS IS THE SOLUTION
if (n> 0) {
String x = jComboBoxPerfilDocumentos.getSelectedItem(). ToString();
}
}
虽然我的答案同意使用内置的方法来做到这一点,这个代码工作得很好:如果您在JComboBox中控制项目采取行动也就迎刃而解了,例如。你确定你的问题不在其他地方吗? – Thor84no
是的,我用了removeAllItems()方法。它删除了所有项目。但仍然有例外。 – chathura
您可能有线程问题。是否有其他线程访问组合框(并编辑它)? – brimborium