在Java中删除组合框中的所有项

在Java中删除组合框中的所有项,java,swing,jcombobox,Java,Swing,Jcombobox,我需要删除组合框中的所有项目 int itemCount = combo.getItemCount(); for(int i = 0; i < itemCount; i++){ combo.removeItemAt(0); } int itemCount=combo.getItemCount(); 对于(int i=0;i

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

int itemCount = combo.getItemCount();

for(int i = 0; i < itemCount; i++){
  combo.removeItemAt(0);
}
int itemCount=combo.getItemCount();
对于(int i=0;i
此代码将删除除最后一项之外的所有项。它给出了一个
NullPointerException

如何解决这个问题?

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

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

combo.removeAllItems();

怎么样?

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

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

发生此异常的原因可能是在删除组合项时触发事件,并且在此事件处理方法中,您仍然引用组合框项

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

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

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

使用此选项删除组合框中的所有元素:

第二行:

combo.removietemat(0)

我认为应该是
I
而不是
0

按以下相反顺序操作:

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

但是在我的例子中,
combo.removeAllItems()
工作正常

通常发生这种情况是因为您有一个与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 ();
  }
}
jComboBoxExample.addActionListener(新ActionListener(){
已执行的公共无效操作(操作事件e){
你跑吗;
}
});
公共空间不运行(){
int n=jcomboxperfildocumentos.getItemCount();0{
字符串x=jcomboxperfildocumentos.getSelectedItem().ToString();
}
}
您可以使用

this.combo.removeAllItems()


删除JComboBox中的所有项。

虽然我同意使用内置方法来执行此操作的答案,但当我自己运行此代码时,它工作正常。你确定你的问题不在其他地方吗?是的,我使用了removeAllItems()方法。它删除了所有项目。但是仍然会出现例外。您可能有线程问题。是否有其他线程访问组合框(并编辑它)?ResultSet result1=null//在添加combo.removeAllItems()之前删除现有项;result1=DBOptions.executeSQLQuery(查询);请尝试{while(result1.next()){String data=result1.getString(1);combo.addItem(data);}@chathura2020将代码添加到您的问题中,而不是添加到注释中…+1,因为这是更好的解决方案。虽然它没有解释OP获得
NullPointerException
…;)的原因,但问题中的代码正常工作。但是,它看起来像是线程问题。另一个线程可能会搞乱这些项目。不要向我解释,请解释将其添加到OP(即,将其包含在您的答案中^^)。
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 ();
  }
}