7

我需要从组合框中删除所有项目

int itemCount = combo.getItemCount();

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

此代码将删除除最后一项之外的所有项目。它给出了一个NullPointerException. 如何解决?

4

9 回答 9

37

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

但是,我建议您最好使用以下removeAllItems();方法:

combo.removeAllItems();
于 2012-09-03T14:01:31.323 回答
3

JComboBox.removeAllItems()怎么样?

于 2012-09-03T14:03:16.170 回答
3

您可以使用

this.combo.removeAllItems();

删除 JComboBox 中的所有项目。

于 2019-04-12T19:47:30.920 回答
2

In second line:

combo.removeItemAt(0);

I think instead of 0 it should be i.

do it in reverse order as:

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

But in my case combo.removeAllItems() works fine

于 2015-03-22T08:51:22.123 回答
1

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

可能会发生此异常,因为在删除组合项时触发了一个事件,并且在此事件处理方法中您仍然引用组合框项。

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

对此的解决方案是将代码从 actionPerformed() 移动到例如 mouseClicked() 或其他事件处理程序,具体取决于您想要执行的操作。

于 2013-01-11T23:59:40.963 回答
1

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

于 2012-09-03T14:08:14.020 回答
0

removeAllItems() 它确实删除了所有东西,但是在将数据添加到组合框后它不会在那里显示,nullPointException 会显示

于 2013-10-21T06:07:17.310 回答
0

使用它从组合框中删除所有元素:

DefaultComboBoxModel model = (DefaultComboBoxModel) ComboBox.getModel();
model.removeAllElements();
于 2014-02-18T13:21:07.023 回答
0

通常它发生是因为您有一个与 JComboBox 相关的事件。如果您在 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 ();
  }
}
于 2015-05-29T08:30:15.600 回答