2012-09-03 68 views
5

我需要从下拉列表框删除从组合框中的所有项目中的Java

int itemCount = combo.getItemCount(); 

    for(int i=0;i<itemCount;i++){ 
     combo.removeItemAt(0); 
    } 

删除所有项目此代码将删除所有项目除了最后一个。它给出了一个NullPointerException。 如何解决这个问题?

+1

虽然我的答案同意使用内置的方法来做到这一点,这个代码工作得很好:如果您在JComboBox中控制项目采取行动也就迎刃而解了,例如。你确定你的问题不在其他地方吗? – Thor84no

+0

是的,我用了removeAllItems()方法。它删除了所有项目。但仍然有例外。 – chathura

+1

您可能有线程问题。是否有其他线程访问组合框(并编辑它)? – brimborium

回答

24

问题中的代码正常工作。但是,它看起来像是一个线程问题。另一个线程可能会弄乱项目。

不过,我sugeest你应该更好地使用removeAllItems();方法:

combo.removeAllItems(); 
+0

+1,因为这是更好的解决方案。虽然它不能解释为什么OP会得到一个'NullPointerException'......) – brimborium

+2

问题中的代码通常会工作。但是,它看起来像是一个线程问题。另一个线程可能会弄乱项目。 –

+0

不要向我解释这一点,向OP解释它(即将它包含在你的答案中^^)。 – brimborium

1

使用.removeAllItems()方法从组合框中删除所有项目。

+0

@RomanC为什么使用removeAll ... thingy没有帮助? –

0

假设它与另一个线程相关并不总是对的。它可能是导致问题的线程本身。

可能会发生此异常,因为当组合项目被删除时触发事件,并且在此事件处理方法中仍引用组合框项目。例如,当您在代码中删除某处(actionPeformed()除外)中的最后一个项目时,combo.removeItemAt(0)或removeAllItems()组合框中的最后一个项目仍然会被触发/执行。但通常actionPerformed()方法包含对用户操作作出反应的代码(用户在组合框某处单击)。因此,当最后一个项目被删除时,组合框中没有更多项目,并且对actionPerformed()中的项目或索引的任何引用都将导致异常。

对此的解决方案是将代码从actionPerformed()移动到例如mouseClicked()或另一个事件处理程序,具体取决于你想要做什么。

0

removeAllItems()它删除所有事情,但将数据添加到组合框后,它不会出现在那里,nullPointException将显示

0

使用此功能可以删除所有从组合框中的元素:

DefaultComboBoxModel model = (DefaultComboBoxModel) ComboBox.getModel(); 
model.removeAllElements(); 
1

在第二行:

combo.removeItemAt(0);我觉得应该是i而不是0

做到以相反的顺序为:

for(int i=combo.getItemCount()-1;i>=0;i--){ 
    combo.removeItemAt(i); 
} 

但在我的情况下combo.removeAllItems()正常工作

0

通常它发生,因为你有一个事件相关联的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(); 
    } 
} 
相关问题