Votre question

Objet bien initialisé et pourtant null ! (JAVA)

Tags :
  • string
  • Programmation
Dernière réponse : dans Programmation
8 Mai 2011 16:26:38

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 :

  1. class Fenetre extends JFrame{
  2.  
  3. ...
  4. Ecouteur e; // Objet controleur qui contient les Listeners
  5. IconesDessin icones; // IconesDessin étant une classe héritée de JToolBar
  6.  
  7. public Fenetre(){
  8.  
  9. icones = new IconesDessin(e);
  10.  
  11. ...
  12. }
  13.  
  14. public IconesDessin getIcones(){
  15. return icones;
  16. }
  17. }



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 ! :

  1. class IconesDessin{
  2.  
  3. JComboBox choixTaille;
  4.  
  5. public IconesDessin(Ecouteur e){
  6. choixTaille = new JComboBox();
  7. choixTaille.setActionCommand("Taille");
  8. choixTaille.addActionListener(e);
  9. choixTaille.addItem("Taille");
  10. choixTaille.addItem("Grand");
  11.  
  12. }
  13.  
  14. public JComboBox getChoixTaille(){
  15. return choixTaille;
  16. }
  17. }
  18.  
  19. class Ecouteurs implements ActionListener{
  20.  
  21. Fenetre fenetre;
  22. int taille;
  23. ...
  24. public Ecouteurs(Fenetre f){
  25. this.fenetre = f;
  26. this.taille = 50;
  27. }
  28.  
  29.  
  30.  
  31. public void actionPerformed(ActionEvent e){
  32.  
  33.  
  34. if(e.getActionCommand().equals("Pinceau")){
  35. if(clicPinceau == 0){
  36. fenetre.getIcones().getOutilsPinceau().setVisible(true); // Ici, fenetre.getIcones() invoquée ==> pas de problème, pas de NullPointerException
  37. clicPinceau++;
  38.  
  39. if(debug) System.out.println("Outil pinceau affiché");
  40. }
  41.  
  42. else{
  43. fenetre.getIcones().getOutilsPinceau().setVisible(false); // Idem ici
  44. clicPinceau = 0;
  45.  
  46. if(debug) System.out.println("Outil pinceau caché");
  47. }
  48. fenetre.repaint();
  49. }
  50.  
  51. else if(e.getActionCommand().equals("Formes")){
  52. if(clicFormes == 0){
  53. fenetre.getIcones().getOutilsFormes().setVisible(true); // Idem ici
  54. clicFormes++;
  55.  
  56. if(debug) System.out.println("Outil formes affiché");
  57. }
  58.  
  59. else{
  60. fenetre.getIcones().getOutilsFormes().setVisible(false); // Idem ici
  61. clicFormes = 0;
  62.  
  63. if(debug) System.out.println("Outil formes caché");
  64. }
  65.  
  66. fenetre.repaint();
  67. }
  68.  
  69. else if(e.getActionCommand().equals("Taille")){
  70.  
  71. if(fenetre.getIcones().getChoixTaille().getSelectedItem().equals("Grand")){ // Exception levée à cette ligne-ci
  72. taille = 50;
  73. }
  74.  
  75. }
  76. }


  1. Exception in thread "main" java.lang.NullPointerException
  2. at controleur.Ecouteurs.actionPerformed(Ecouteurs.java:139)
  3. at javax.swing.JComboBox.fireActionEvent(Unknown Source)
  4. at javax.swing.JComboBox.contentsChanged(Unknown Source)
  5. at javax.swing.AbstractListModel.fireContentsChanged(Unknown Source)
  6. at javax.swing.DefaultComboBoxModel.setSelectedItem(Unknown Source)
  7. at javax.swing.DefaultComboBoxModel.addElement(Unknown Source)
  8. at javax.swing.JComboBox.addItem(Unknown Source)
  9. at vue.IconesDessin.<init>(IconesDessin.java:76)
  10. at vue.Fenetre.<init>(Fenetre.java:45)
  11. 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

a c 232 L Programmation
8 Mai 2011 21:06:01

Salut,

Dans l'erreur que tu as, rien ne te dit que c'est l'objet icones qui est null.
Ca peut être très bien être le JComboBox ou le SelectedItem du JComboBox qui est null ;) 
m
0
l
8 Mai 2011 21:07:20

Ah ; mais de toute manière je comprends pas qu'il y ait un objet qui soit null :p  la JComboBox est initialisée, et j'y ajoute bien des objets !
m
0
l
a c 232 L Programmation
9 Mai 2011 09:39:14

bah est-ce que le SelectedItem est bien non null ?
Essaie de diviser le tout:
  1. IconesDessin icones = fenetre.getIcones();
  2. JComboBox choixTaille = icones.getChoixTaille();
  3. string selectedItem = choixTaille.getSelectedItem();
  4. if(selectedItem.equals("Grand" )){ // Exception levée à cette ligne-ci
  5. taille = 50;
  6. }


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)
m
0
l
9 Mai 2011 23:22:04

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?
m
0
l
a c 232 L Programmation
10 Mai 2011 00:24:36

Bah tout ce que je peux te dire, maintenant c'est que l'objet est null, c'est qu'il y a quelque chose qui ne passe pas dans ton initialisation.
Avec le code que tu as fourni, c'est difficile de dire quoi, mais ton objet est null, donc il n'est pas initialisé.
m
0
l
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS