Je dois supprimer tous les éléments de la liste déroulante
int itemCount = combo.getItemCount();
for(int i=0;i<itemCount;i++){
combo.removeItemAt(0);
}
Ce code supprimera tous les éléments sauf le dernier. Cela donne une exception NullPointerException. Comment résoudre ce problème?
Le code dans la question fonctionnerait normalement. Cependant, cela ressemble à un problème de thread. Un autre fil peut être jouer avec les éléments.
Cependant, je pense que vous devriez mieux utiliser la méthode removeAllItems();
:
combo.removeAllItems();
Que diriez-vous JComboBox.removeAllItems () ?
En deuxième ligne:
combo.removeItemAt(0)
;
Je pense qu'au lieu de 0
il devrait être i
.
faites-le dans l'ordre inverse comme:
for(int i=combo.getItemCount()-1;i>=0;i--){
combo.removeItemAt(i);
}
Mais dans mon cas, combo.removeAllItems()
fonctionne bien
utilisez les méthodes .removeAllItems () pour supprimer tous les éléments de la liste déroulante.
removeAllItems (), il supprime tout, mais après l'ajout de données à la liste déroulante, il ne s'affichera pas là, la nullPointException montrera
Cela se produit généralement parce que vous avez un événement associé à JComboBox. Le problème est résolu si vous avez un élément de contrôle dans JComboBox à agir, par exemple:
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 ();
}
}
Utilisez cette option pour supprimer tous les éléments de la liste déroulante:
DefaultComboBoxModel model = (DefaultComboBoxModel) ComboBox.getModel();
model.removeAllElements();
L'hypothèse selon laquelle il est lié à un autre thread n'est pas toujours vraie. Ce peut être le fil lui-même qui cause le problème.
Cette exception peut se produire car un événement est déclenché lorsqu'un élément combiné est supprimé et que, dans cette méthode de gestion des événements, vous faites toujours référence aux éléments de la liste déroulante.
Par exemple, lorsque vous supprimez un élément (autre que dans actionPeformed ()) dans votre code, le dernier élément d'une liste déroulante avec combo.removeItemAt (0) ou removeAllItems () est toujours déclenché/exécuté. Mais très souvent, la méthode actionPerformed () contient du code pour réagir aux actions de l'utilisateur (l'utilisateur a cliqué quelque part sur la liste déroulante). Ainsi, lorsque le dernier élément a été supprimé, il n'y a plus d'élément dans la liste déroulante et toute référence à un élément ou à un index dans actionPerformed () provoquera une exception.
La solution à cela est de déplacer le code de actionPerformed () vers ex. mouseClicked () ou un autre gestionnaire d'événements en fonction de ce que vous voulez faire.