Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[Newbie] Pb NullPointerException avec un JComboBox

4 réponses
Avatar
rom15becs
Salut a tous, j'ai fais un programme avec un JComboBox. Le seul probleme c'est
qu'au moment de lancer la fonction getItemCount, le programme me retourne une
NullPointerException. je suppose que le probleme viens au niveau de
l'actionListener voici un aperçut de mon programme:

*******
public class PassgenComposants extends JPanel implements ActionListener{

private JComboBox choix;

public PassgenComposants(){


JComboBox choix=new JComboBox();
choix.addItem("Simple (a-z)");
choix.addItem("Elaboré (a-z+A-Z)");
choix.addItem("Complexe (a-z+0-9)");
choix.addItem("Securisé (a-z + A-Z + 0-9)");


PanneauGauche.add(choix);

JPanel PanneauCentre=new JPanel();
lancer=new JButton ("Generer le code");
PanneauCentre.add(lancer);

setLayout (new BorderLayout());
add(PanneauGauche, BorderLayout.WEST);
add(PanneauCentre, BorderLayout.CENTER);
add(jsp, BorderLayout.EAST);

lancer.addActionListener(this);


}
public void actionPerformed (ActionEvent e){
if(e.getSource()==lancer){

resultat.setText("Generer cliqué");
int selec=choix.getItemCount();
if (selec==1){
resultat.setText("Choix 1");
System.out.println("Premier code choisi");
}
else{
resultat.setText("Autre choix");
System.out.println("Autre choix");
}
}
}





}


}


Voila, merci de m'indiquer la solution passke la franchement, je vois pas du
tout...
Merci
Rom15Becs

4 réponses

Avatar
Nicolas Delsaux
Le 17.10 2003, (Rom15becs) s'est levé(e) et s'est dit
"tiens, je vais écrire aux mecs de fr.comp.lang.java"

Salut a tous, j'ai fais un programme avec un JComboBox. Le seul
probleme c'est qu'au moment de lancer la fonction getItemCount, le
programme me retourne une NullPointerException. je suppose que le
probleme viens au niveau de l'actionListener voici un aperçut de mon
programme:


Pas du tout !
Un NullPointerException signifie que l'objet sur lequel tu travailles
vaut null, ce qui interdit l'appel de méthode dessus. La question est de
savoir pourquoi il est null. Et la réponse est assez simple : masquage de
variable !
Je n'ai laissé que les lignes significatives.

*******
public class PassgenComposants extends JPanel implements
ActionListener{

private JComboBox choix;

public PassgenComposants(){


JComboBox choix=new JComboBox();
}
public void actionPerformed (ActionEvent e){
if(e.getSource()==lancer){

int selec=choix.getItemCount();
}
}
}
}



Le problème vient du fait que, dans ton constructeur, tu crées une
variable *locale* à la méthode qui s'appelle choix (tout comme ta
variable d'instance) et qui est initialisée.
Ta variable d'instance choix est, elle, masquée par cette variable
locale. Elle n'est donc pas initialisée, et vaut logiquement null lors de
l'appel à la méthode actionPerformed.
La correction à faire est très simple : dans ton constructeur, remplace
la ligne
JComboBox choix=new JComboBox();
par
choix=new JComboBox();



Voila, merci de m'indiquer la solution passke la franchement, je vois
pas du tout...
Merci
Rom15Becs







--
Nicolas Delsaux
N > Sur Internet, personne ne sait que vous êtes ... un singe
in fras, to be or not to be

Avatar
jerome moliere
Nicolas Delsaux wrote:
Le 17.10 2003, (Rom15becs) s'est levé(e) et s'est dit
"tiens, je vais écrire aux mecs de fr.comp.lang.java"


Salut a tous, j'ai fais un programme avec un JComboBox. Le seul
probleme c'est qu'au moment de lancer la fonction getItemCount, le
programme me retourne une NullPointerException. je suppose que le
probleme viens au niveau de l'actionListener voici un aperçut de mon
programme:



Pas du tout !
Un NullPointerException signifie que l'objet sur lequel tu travailles
vaut null, ce qui interdit l'appel de méthode dessus. La question est de
savoir pourquoi il est null. Et la réponse est assez simple : masquage de
variable !
Je n'ai laissé que les lignes significatives.

*******
public class PassgenComposants extends JPanel implements
ActionListener{

private JComboBox choix;

public PassgenComposants(){


JComboBox choix=new JComboBox();
}
public void actionPerformed (ActionEvent e){
if(e.getSource()==lancer){

int selec=choix.getItemCount();
}
}
}
}




Le problème vient du fait que, dans ton constructeur, tu crées une
variable *locale* à la méthode qui s'appelle choix (tout comme ta
variable d'instance) et qui est initialisée.
Ta variable d'instance choix est, elle, masquée par cette variable
locale. Elle n'est donc pas initialisée, et vaut logiquement null lors de
l'appel à la méthode actionPerformed.
La correction à faire est très simple : dans ton constructeur, remplace
la ligne
JComboBox choix=new JComboBox();
par
choix=new JComboBox();


la vraie solution cher monsieur delsaux serait d'utiliser une convention
de nommage evitan tainsi à la base ce type de shadowing tres pervers :)

Jerome


Avatar
Laurent Bossavit
la vraie solution cher monsieur delsaux serait d'utiliser une convention
de nommage evitan tainsi à la base ce type de shadowing tres pervers :)


La vraie solution serait d'écrire des tests unitaires avant d'écrire le
code. Les conventions de nommage ne seraient qu'une béquille; le code
fourni par le premier contributeur souffre de plusieurs autres défauts,
comme le "selection = combo.getItemCount()".

Laurent
http://bossavit.com/

Avatar
jerome moliere
Laurent Bossavit wrote:
la vraie solution cher monsieur delsaux serait d'utiliser une convention
de nommage evitan tainsi à la base ce type de shadowing tres pervers :)



La vraie solution serait d'écrire des tests unitaires avant d'écrire le
code. Les conventions de nommage ne seraient qu'une béquille; le code
fourni par le premier contributeur souffre de plusieurs autres défauts,
comme le "selection = combo.getItemCount()".


ceci c'est du curatif pas du preventif, utile certes....
cela n'empeche pas de bugs, cela permet de ne pas laisser partir un bug
en prod....

Jerome