Objet bien initialisé et pourtant null ! (JAVA)
Dernière réponse : dans Programmation
Bonjour !
Depuis hier je me démène avec un problème que je n'arrive pas à résoudre :
Ayant voulu utiliser une simple JComboBox, je me retrouve avec une NullPointerException dès que j'ajoute un objet String dans celle-ci . Après quelques recherches, en utilisant le mode debug, je me suis rendu compte que l'objet qui contenait la JComboBox était null... Voici le schéma de mon projet pour être claire :
Donc, c'est l'objet icones qui contient la JComboBox; comme vous pouvez le voir j'initialise l'objet ! Et pourtant en utilisant le mode debug, et en faisant ctrl+shift+i, je vois que l'objet est null. Paradoxalement, je n'avais jamais eu de problème avec cet objet là jusque là, il marchait parfaitement et aucune exception n'était levée ; mais, depuis que j'ai voulu récupérer ma JComboBox dans un ActionListener, l'exception est levée ; comme un code vaut mieux que milles explications ! :
Je ne comprends donc pas :
- pourquoi mon objet icones est null alors que je l'initialise correctement
- pourquoi cela ne crée de problème qu'avec une seule invocation de la méthode fenetre.getIcones(); le problème viendrait-il spécifiquement de getChoixTaille() ?
Merci d'avance pour votre aide, j'espère qu'on va pouvoir solutionner ça , je cherche depuis deux jours en vain !
Depuis hier je me démène avec un problème que je n'arrive pas à résoudre :
Ayant voulu utiliser une simple JComboBox, je me retrouve avec une NullPointerException dès que j'ajoute un objet String dans celle-ci . Après quelques recherches, en utilisant le mode debug, je me suis rendu compte que l'objet qui contenait la JComboBox était null... Voici le schéma de mon projet pour être claire :
class Fenetre extends JFrame{
...
Ecouteur e; // Objet controleur qui contient les Listeners
IconesDessin icones; // IconesDessin étant une classe héritée de JToolBar
public Fenetre(){
icones = new IconesDessin(e);
...
}
public IconesDessin getIcones(){
return icones;
}
}
Donc, c'est l'objet icones qui contient la JComboBox; comme vous pouvez le voir j'initialise l'objet ! Et pourtant en utilisant le mode debug, et en faisant ctrl+shift+i, je vois que l'objet est null. Paradoxalement, je n'avais jamais eu de problème avec cet objet là jusque là, il marchait parfaitement et aucune exception n'était levée ; mais, depuis que j'ai voulu récupérer ma JComboBox dans un ActionListener, l'exception est levée ; comme un code vaut mieux que milles explications ! :
class IconesDessin{
JComboBox choixTaille;
public IconesDessin(Ecouteur e){
choixTaille = new JComboBox();
choixTaille.setActionCommand("Taille");
choixTaille.addActionListener(e);
choixTaille.addItem("Taille");
choixTaille.addItem("Grand");
}
public JComboBox getChoixTaille(){
return choixTaille;
}
}
class Ecouteurs implements ActionListener{
Fenetre fenetre;
int taille;
...
public Ecouteurs(Fenetre f){
this.fenetre = f;
this.taille = 50;
}
public void actionPerformed(ActionEvent e){
if(e.getActionCommand().equals("Pinceau")){
if(clicPinceau == 0){
fenetre.getIcones().getOutilsPinceau().setVisible(true); // Ici, fenetre.getIcones() invoquée ==> pas de problème, pas de NullPointerException
clicPinceau++;
if(debug) System.out.println("Outil pinceau affiché");
}
else{
fenetre.getIcones().getOutilsPinceau().setVisible(false); // Idem ici
clicPinceau = 0;
if(debug) System.out.println("Outil pinceau caché");
}
fenetre.repaint();
}
else if(e.getActionCommand().equals("Formes")){
if(clicFormes == 0){
fenetre.getIcones().getOutilsFormes().setVisible(true); // Idem ici
clicFormes++;
if(debug) System.out.println("Outil formes affiché");
}
else{
fenetre.getIcones().getOutilsFormes().setVisible(false); // Idem ici
clicFormes = 0;
if(debug) System.out.println("Outil formes caché");
}
fenetre.repaint();
}
else if(e.getActionCommand().equals("Taille")){
if(fenetre.getIcones().getChoixTaille().getSelectedItem().equals("Grand")){ // Exception levée à cette ligne-ci
taille = 50;
}
}
}
Exception in thread "main" java.lang.NullPointerException
at controleur.Ecouteurs.actionPerformed(Ecouteurs.java:139)
at javax.swing.JComboBox.fireActionEvent(Unknown Source)
at javax.swing.JComboBox.contentsChanged(Unknown Source)
at javax.swing.AbstractListModel.fireContentsChanged(Unknown Source)
at javax.swing.DefaultComboBoxModel.setSelectedItem(Unknown Source)
at javax.swing.DefaultComboBoxModel.addElement(Unknown Source)
at javax.swing.JComboBox.addItem(Unknown Source)
at vue.IconesDessin.<init>(IconesDessin.java:76)
at vue.Fenetre.<init>(Fenetre.java:45)
at main.Main.main(Main.java:29)
Je ne comprends donc pas :
- pourquoi mon objet icones est null alors que je l'initialise correctement
- pourquoi cela ne crée de problème qu'avec une seule invocation de la méthode fenetre.getIcones(); le problème viendrait-il spécifiquement de getChoixTaille() ?
Merci d'avance pour votre aide, j'espère qu'on va pouvoir solutionner ça , je cherche depuis deux jours en vain !
Autres pages sur : objet bien initialise pourtant null java
Lassé par la pub ? Créez un compte
bah est-ce que le SelectedItem est bien non null ?
Essaie de diviser le tout:
Et comme ça, si ça plante, tu verras à quel endroit... (hmm, j'ai mis le selectedItem en type string, mais je suis pas sûr que ce soit le cas, je te laisse arranger ça)
Essaie de diviser le tout:
IconesDessin icones = fenetre.getIcones(); JComboBox choixTaille = icones.getChoixTaille(); string selectedItem = choixTaille.getSelectedItem(); if(selectedItem.equals("Grand" )){ // Exception levée à cette ligne-ci taille = 50; }
Et comme ça, si ça plante, tu verras à quel endroit... (hmm, j'ai mis le selectedItem en type string, mais je suis pas sûr que ce soit le cas, je te laisse arranger ça)
Bonsoir,
J'ai fait ce que tu m'as dis et l'exception est levée sur choixTaille ; le problème est que j'ai envie de dire "et maintenant?" parce que je ne vois sincerement pas d'où vient le probleme...
Exception in thread "main" java.lang.NullPointerException
at controleur.Ecouteurs.<init>(Ecouteurs.java:86)
at vue.Fenetre.<init>(Fenetre.java:34)
at main.Main.main(Main.java:29)
Je n'arrête pas de vérifier encore et encore si la méthode est correcte et si j'ai initialisé l'objet, et la réponse et oui ! Que faire?
J'ai fait ce que tu m'as dis et l'exception est levée sur choixTaille ; le problème est que j'ai envie de dire "et maintenant?" parce que je ne vois sincerement pas d'où vient le probleme...
Exception in thread "main" java.lang.NullPointerException
at controleur.Ecouteurs.<init>(Ecouteurs.java:86)
at vue.Fenetre.<init>(Fenetre.java:34)
at main.Main.main(Main.java:29)
Je n'arrête pas de vérifier encore et encore si la méthode est correcte et si j'ai initialisé l'objet, et la réponse et oui ! Que faire?
Lassé par la pub ? Créez un compte
- Contenus similaires :
Tags :
la JComboBox est initialisée, et j'y ajoute bien des objets !