2012-09-03 18 views
5

tengo que quitar todos los elementos en el cuadro combinadoExtracción de todos los elementos de un cuadro combinado en Java

int itemCount = combo.getItemCount(); 

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

Este código será eliminar todos los elementos excepto el último. Da una NullPointerException. ¿Cómo solucionar eso?

+1

Aunque estoy de acuerdo con las respuestas a usar el método integrado para realizar esta acción, este código funciona bien cuando corro yo mismo .¿Estás seguro de que tu problema no está en otra parte? – Thor84no

+0

sí, utilicé el método removeAllItems(). Eliminó todos los artículos. Pero aún da la excepción. – chathura

+1

Es posible que tenga un problema de enhebrado. ¿Hay otros subprocesos que acceden al cuadro combinado (y lo editan)? – brimborium

Respuesta

24

El código en la pregunta normalmente funcionaría. Sin embargo, parece un problema de enhebrado. Otro hilo puede estar jugando con los artículos.

Sin embargo, sugeest debería utilizar mejor el método removeAllItems();:

combo.removeAllItems(); 
+0

+1 porque esa es la mejor solución. Aunque no explica por qué OP obtiene una 'NullPointerException' ...;) – brimborium

+2

El código en la pregunta normalmente funcionaría. Sin embargo, parece un problema de enhebrado. Otro hilo puede estar jugando con los artículos. –

+0

No me explique eso, explíquelo al OP (es decir, inclúyalo en su respuesta ^^). – brimborium

1

utilice los métodos .removeAllItems() para eliminar todos los elementos del cuadro combinado.

+0

@RomanC ¿por qué no es útil utilizar removeAll ... thingy? –

0

La suposición de que está relacionado con otro subproceso no siempre es cierto. Puede ser el hilo mismo el que causa el problema.

Esta excepción puede ocurrir porque un evento se desencadena cuando se elimina un elemento combinado y en este caso el método de manejo aún se refiere a los elementos del cuadro combinado.

Por ejemplo, cuando elimina en algún lugar (que no sea en actionPeformed()) en su código el último elemento de un cuadro combinado con combo.removeItemAt (0) o removeAllItems(), el evento actionPerformed se disparará/ejecutará. Pero muy a menudo el método actionPerformed() contiene código para reaccionar en las acciones del usuario (el usuario hizo clic en algún lugar del cuadro combinado). Por lo tanto, cuando se eliminó el último elemento, no hay más elementos en el cuadro combinado y cualquier referencia a un elemento o índice en actionPerformed() causará una excepción.

La solución a esto consiste en mover el código de actionPerformed() a p. mouseClicked() u otro manejador de eventos dependiendo de lo que desee hacer.

0

RemoveAllItems() lo hace quitar todas las cosas, pero después de que el agregar datos al cuadro combinado no se mostrará, sirva muestra el nullPointException

0

Utilice esta opción para eliminar todos los elementos del cuadro combinado:

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

En segunda línea:

combo.removeItemAt(0);

Creo que en lugar de 0 debería ser i.

lo hacen en orden inverso:

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

Pero en mi caso combo.removeAllItems() funciona bien

0

suele ocurrir porque tiene un JComboBox evento asociado. Se resuelto si tiene elemento de control en el JComboBox para actuar, por ejemplo:

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(); 
    } 
} 
Cuestiones relacionadas