Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2905 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Problème java.lang.NullPointerException

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème java.lang.NullPointerException

n°2050314
Guillaumux
Posté le 19-01-2011 à 21:54:18  profilanswer
 

Bonsoir,
 
Etant en iut informatique, cette semaine nous avons un projet consistant à réaliser un "snake".
 
Mais lorsque je veux exécuter mon programme il me met  
"Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException  (AWT-EventQueue-0 doit etre une methode des classes que les profs nous ont donné pour l'interface graphique)
                                            at Controleur.getNbLigne(Controleur.java:69)
et plein d'autre ligne qui résulte de ça.
 
Donc moi, j'ai crée deux classes: Controleur et Metier
 

Citation :

public class Controleur
{
        public Controleur()
        {
                   Metier metier = new Metier(5,5,11,11);
                   ...
        }
 
         public int getNbLigne ()  
         {  
                       return metier.NbLigne(); //endroit où ça bloque
         }
}


Citation :


public class Metier
{
 
          private int tailleLig, tailleCol;
 
          public Metier ( int lig, int col, int tailleLig_, int tailleCol_ ) //constructeur Metier
          {
                  tailleLig = tailleLig_ ;
                   ...
           }
 
        public int NbLigne()
        {
                 return (tailleLig);  
         }
}


 
Je ne comprends pas l'erreur surtout que si on remplace tailleLig par une valeur quelconque, il n'y a pas d'erreur...
 
Merci d'avance.
 
(Désolé pour la présentation c'est pas très clair )


Message édité par Guillaumux le 19-01-2011 à 22:14:07
mood
Publicité
Posté le 19-01-2011 à 21:54:18  profilanswer
 

n°2050319
esox_ch
Posté le 19-01-2011 à 22:06:26  profilanswer
 

Dans ton controleur, c 'est quoi "metier", parce qu'on dirait qu'il n'est pas instantié, et vaut donc null


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°2050321
Guillaumux
Posté le 19-01-2011 à 22:11:24  profilanswer
 

Oui, je ne l'ai pas mis mais il est instancié dans une methode dans Controleur
Le code complet va être posté juste en dessous.


Message édité par Guillaumux le 19-01-2011 à 22:14:46
n°2050322
valoutux
Posté le 19-01-2011 à 22:13:22  profilanswer
 

code complet ( c'est plus simple ) :  

Code :
  1. /*============== Snake classe Metier ==============*/
  2. public class Metier
  3. {
  4. private char grille[][];
  5. private Element serpent[];
  6. private int tailleLig, tailleCol;
  7. private int tailleQueue;
  8. private int tempLig[];
  9. private int tempCol[];
  10. private int nbPas;
  11. private char dirTete;
  12. private int nbPastille;
  13. public Metier ( int lig, int col, int tailleL, int tailleC ) //constructeur Metier
  14. {
  15.  tailleLig = tailleL;
  16.  tailleCol = tailleC;
  17.  dirTete='N';
  18.  nbPastille=10;
  19.  nbPas=0;
  20.  grille = new char[tailleLig][tailleCol];
  21.  serpent = new Element[11];
  22.  serpent[0]= new Element(lig,col);
  23.  tailleQueue=0;
  24.  tempLig = new int[11];
  25.  tempCol = new int[11];
  26.  initialiseGrille();
  27.  ajouterMur(0,0);
  28.  ajouterMur(0,1);
  29.  ajouterMur(0,2);
  30.  ajouterMur(0,3);
  31.  ajouterMur(0,7);
  32.  ajouterMur(0,8);
  33.  ajouterMur(0,9);
  34.  ajouterMur(0,10);
  35.  ajouterMur(1,0);
  36.  ajouterMur(2,0);
  37.  ajouterMur(3,0);
  38.  ajouterMur(7,0);
  39.  ajouterMur(8,0);
  40.  ajouterMur(9,0);
  41.  ajouterMur(10,0);
  42.  ajouterPastille (nbPastille);
  43.  System.out.println(toString ());
  44. }
  45. public boolean deplacer ( char dir, int nbPastille ) //methode deplacer
  46. {
  47.  boolean deplacement = false;
  48.  dirTete=dir;
  49.  positionTemp (); //appel de la methode positionTemp pour garder la position actuelle en mémoire avant deplacement.
  50.  if ( (serpent[0].getLig() == 0) && (dir == 'N'))
  51.  {
  52.   serpent[0]=new Element(serpent[0].getLig()+tailleLig-1,serpent[0].getCol());   //verifier si serpent[0] est sur l'extrémité Nord(torique)
  53.   nbPas++;
  54.   deplacement = true;
  55.  }
  56.  else if ( (serpent[0].getLig() == tailleLig-1) && (dir == 'S'))
  57.  {
  58.   serpent[0]=new Element(0,serpent[0].getCol());     //verifier si serpent[0] est sur l'extrémité Sud(torique)
  59.   nbPas++;
  60.   deplacement = true;
  61.  }
  62.  else if ( (serpent[0].getCol() == 0) && (dir == 'O'))
  63.  {
  64.   serpent[0]=new Element(serpent[0].getLig(),serpent[0].getCol()+tailleCol-1);  //verifier si serpent[0] est sur l'extrémité Ouest(torique)
  65.   nbPas++;
  66.   deplacement = true;
  67.  }
  68.  else if ( (serpent[0].getCol() == tailleCol-1) && (dir == 'E'))
  69.  {
  70.   serpent[0]=new Element(serpent[0].getLig(),0);     //verifier si serpent[0] est sur l'extrémité Est(torique)
  71.   nbPas++;
  72.   deplacement = true;
  73.  }
  74.  else
  75.  {
  76.   if ( (dir == 'N') && (grille[serpent[0].getLig()-1][serpent[0].getCol()] != '▒') ) // gestion de la collision avec les murs '▒' au Nord.
  77.   {
  78.    serpent[0]=new Element(serpent[0].getLig()-1,serpent[0].getCol());
  79.    nbPas++;
  80.    deplacement = true;
  81.   }
  82.   if ( (dir == 'S') && (grille[serpent[0].getLig()+1][serpent[0].getCol()] != '▒') ) // gestion de la collision avec les murs '▒' au Sud.
  83.   {
  84.    serpent[0]=new Element(serpent[0].getLig()+1,serpent[0].getCol());
  85.    nbPas++;
  86.    deplacement = true;
  87.   }
  88.   if ( (dir == 'E') && (grille[serpent[0].getLig()][serpent[0].getCol()+1] != '▒') ) // gestion de la collision avec les murs '▒' à l'Est.
  89.   {
  90.    serpent[0]=new Element(serpent[0].getLig(),serpent[0].getCol()+1);
  91.    nbPas++;
  92.    deplacement = true;
  93.   }
  94.   if ( (dir == 'O') && (grille[serpent[0].getLig()][serpent[0].getCol()-1] != '▒') ) // gestion de la collision avec les murs '▒' à l'Ouest.
  95.   {
  96.    serpent[0]=new Element(serpent[0].getLig(),serpent[0].getCol()-1);
  97.    nbPas++;
  98.    deplacement = true;
  99.   }
  100.  }
  101.  retirerPastille(nbPastille); //verifie si le serpent mange pastille.
  102.  deplacement = mordQueue();   //verifie si le serpent mange sa queue.
  103.  return deplacement;
  104. }
  105. public void initialiseGrille () //methode qui initialise une grille vide avec des '.'
  106. {
  107.  int i=0,j;
  108.  while (i < tailleLig)
  109.  {
  110.   j=0;
  111.   while ( j < tailleCol)
  112.   {
  113.    this.grille[i][j]='.';
  114.    j++;
  115.   }
  116.   i++;
  117.  }
  118. }
  119. public String toString () //methode d'affichage de la grille  et du serpent[0]
  120. {
  121.  int i=0,j,t=1;
  122.  String ch="";
  123.  System.out.print ("taille serpent : "+(tailleQueue+1)+"/11\n" );
  124.  while (i < tailleLig)
  125.  {
  126.   j=0;
  127.   while ( j < tailleCol)
  128.   {
  129.    if ( (serpent[0].getLig() == i) && (serpent[0].getCol() == j)) ch=ch+" ☺";
  130.    else if ( (tailleQueue > 0) && (serpent[1].getLig() == i) && (serpent[1].getCol() == j)) ch=ch+" ○";
  131.    else if ( (tailleQueue > 1) && (serpent[2].getLig() == i) && (serpent[2].getCol() == j)) ch=ch+" ○";
  132.    else if ( (tailleQueue > 2) && (serpent[3].getLig() == i) && (serpent[3].getCol() == j)) ch=ch+" ○";
  133.    else if ( (tailleQueue > 3) && (serpent[4].getLig() == i) && (serpent[4].getCol() == j)) ch=ch+" ○";
  134.    else if ( (tailleQueue > 4) && (serpent[5].getLig() == i) && (serpent[5].getCol() == j)) ch=ch+" ○";
  135.    else if ( (tailleQueue > 5) && (serpent[6].getLig() == i) && (serpent[6].getCol() == j)) ch=ch+" ○";
  136.    else if ( (tailleQueue > 6) && (serpent[7].getLig() == i) && (serpent[7].getCol() == j)) ch=ch+" ○";
  137.    else if ( (tailleQueue > 7) && (serpent[8].getLig() == i) && (serpent[8].getCol() == j)) ch=ch+" ○";
  138.    else if ( (tailleQueue > 8) && (serpent[9].getLig() == i) && (serpent[9].getCol() == j)) ch=ch+" ○";
  139.    else if ( (tailleQueue > 9) && (serpent[10].getLig() == i) && (serpent[10].getCol() == j)) ch=ch+" ○";
  140.    else ch=ch+" "+this.grille[i][j];
  141.    /*if ( tailleQueue > 0 )
  142.    {
  143.     t=1;
  144.     while ( t <= tailleQueue )
  145.     {
  146.      
  147.      if ( (serpent[t].getLig() == i) && (serpent[t].getCol() == j)) ch=ch+" s";
  148.      t++;
  149.     }
  150.    }*/
  151.    j++;
  152.   }
  153.   ch=ch+"\n";
  154.   i++;
  155.  }
  156.  return ch;
  157. }
  158. public void ajouterMur(int lig,int col) //methode qui gère l'ajout des murs '▒' (par symétrie si le mur est sur un bord de la grille)
  159. {
  160.  if ((lig == 0 && col == 0) || (lig == 0 && col == tailleCol-1) || (lig == tailleLig-1 && col == tailleCol-1) || (lig == tailleLig-1 && col == 0)) //gestion des murs dans les angles de la grille
  161.  {
  162.   this.grille[tailleLig-1][tailleCol-1]='▒';
  163.   this.grille[tailleLig-1][0]='▒';
  164.   this.grille[0][0]='▒';
  165.   this.grille[0][tailleCol-1]='▒';
  166.  }
  167.  else if (lig == 0) {this.grille[tailleLig-1][col]='▒'; this.grille[lig][col]='▒';}  //gestion des murs Nord
  168.  else if (col == 0) {this.grille[lig][tailleCol-1]='▒'; this.grille[lig][col]='▒';}  //gestion des murs Ouest
  169.  else if (lig == tailleLig-1) {this.grille[0][col]='▒'; this.grille[lig][col]='▒';}  //gestion des murs Sud
  170.  else if (col == tailleCol-1) {this.grille[lig][0]='▒'; this.grille[lig][col]='▒';}  //gestion des murs Est
  171.  else this.grille[lig][col]='▒';        //gestion des autres emplacements de la grille
  172. }
  173. public void ajouterPastille (int nb) //methode qui ajoute des pastilles sur la grille
  174. {
  175.  nbPastille=nb;
  176.  while ( nb > 0 )
  177.  {
  178.   int l=(int) (Math.random () * tailleLig );
  179.   int c=(int) (Math.random () * tailleCol );
  180.   if ( this.grille[l][c] == '.' )
  181.   {
  182.    this.grille[l][c]= 'O';
  183.    nb--;
  184.   }
  185.  }
  186. }
  187. public void retirerPastille (int nbPastille) //methode qui retire les pastille si le serpent[0] les mange.
  188. {
  189.  if ( grille[serpent[0].getLig()][serpent[0].getCol()] == 'O' )
  190.  {
  191.    this.grille[serpent[0].getLig()][serpent[0].getCol()]='.';
  192.    nbPastille--;
  193.    tailleQueue++;
  194.  }
  195.  deplacerAnneau(); //appel de la methode deplacerAnneau().
  196. }
  197. public boolean mordQueue() //methode qui verifie si le serpent se mord la queue.
  198. {
  199.  int i=1;
  200.  boolean mord = false;
  201.  while ( i <= tailleQueue )
  202.  {
  203.   if ( (serpent[0].getLig() == serpent[i].getLig()) && (serpent[0].getCol() == serpent[i].getCol()))
  204.   {
  205.    mord = false;
  206.   }
  207.   i++;
  208.  }
  209.  return mord;
  210. }
  211. public void deplacerAnneau() //methode qui gère le deplacement des anneaux de la queue.
  212. {
  213.  int i;
  214.  if ( tailleQueue > 0 )
  215.  {
  216.   i=1;
  217.   while ( i <= tailleQueue )
  218.   {
  219.    if ( (serpent[0].getLig() != tempLig[0]) || (serpent[0].getCol() != tempCol[0]) ) serpent[i]= new Element(tempLig[i-1],tempCol[i-1]);
  220.    i++;
  221.   }
  222.  }
  223. }
  224. public void positionTemp () //methode qui garde en memoire la position de la tête et de ses anneaux.
  225. {
  226.  int i=0;
  227.  tempLig[0]=serpent[0].getLig();
  228.  tempCol[0]=serpent[0].getCol();
  229.  if ( tailleQueue > 0 )
  230.  {
  231.   while ( i <= tailleQueue )
  232.   {
  233.    tempLig[i]=serpent[i].getLig();
  234.    tempCol[i]=serpent[i].getCol();
  235.    i++;
  236.   }
  237.  }
  238. }
  239. public int getNbLigne()
  240. {
  241.  return tailleLig;
  242. }
  243. public int getNbColonne()
  244. {
  245.  return tailleCol;
  246. }
  247. public int getNbPas()
  248. {
  249.  return nbPas;
  250. }
  251. public String getElt(int ligne,int colonne)
  252. {
  253.  if (grille[ligne][colonne] == '▒') return "./image/M.jpg";
  254.  else if (grille[ligne][colonne] == '.') return "./image/P.jpg";
  255.  else if ((serpent[0].getLig()==ligne) && (serpent[0].getCol()==colonne))
  256.  {
  257.   if(dirTete == 'N') return "./image/TN.jpg";
  258.   else if (dirTete == 'E') return "./image/TE.jpg";
  259.   else if (dirTete== 'S') return "./image/TS.jpg";
  260.   else return "./image/TO.jpg";
  261.  }
  262.  else
  263.  {
  264.   int cpt = tailleQueue;
  265.   while ( cpt > 0 )
  266.   {
  267.    if((ligne==serpent[cpt].getLig()) && (colonne==serpent[cpt].getCol())) return "./image/A.jpg";
  268.    cpt--;
  269.   }
  270.   return "./image/vide.jpg";
  271.  }
  272. }
  273. public int getNbPastille()
  274. {
  275.  return nbPastille;
  276. }
  277. }

 
 

Code :
  1. /*============== Snake classe Controleur ==============*/
  2. public class Controleur
  3. {
  4. private Metier metier;
  5. private FrameGrille frm;
  6. private String message;
  7. private boolean bFinPartie;
  8. private int nbPastille;
  9. public Controleur()
  10. {
  11.  Metier metier = new Metier(5,5,11,11); //initialisation de metier.
  12.  frm  = new FrameGrille ( this );
  13.  frm.setSize ( 750, 500 );
  14.  frm.setLocation ( 300, 30 );
  15.  frm.setTitle ( "Mega-Snake 4.0" );
  16.  frm.setVisible ( true );
  17.  message = "";
  18.  bFinPartie = false;
  19. }
  20. public void jouer (char dir)
  21. {
  22.  System.out.println("debut jouer()" );
  23.  boolean retour;
  24.  if ( !bFinPartie )
  25.  {
  26.   retour = metier.deplacer(dir,nbPastille);
  27.   nbPastille = metier.getNbPastille();
  28.   frm.majIHM();
  29.   if ( nbPastille == 0 )
  30.   {
  31.    message = "!!! Vous avez gagné !!!";
  32.    bFinPartie = true;
  33.   }
  34.   else if ( retour == false )
  35.   {
  36.    message = "!!! PERDU !!! (vous êtes nul)";
  37.    bFinPartie = true;
  38.   }
  39.  }
  40. }
  41. public String getImage (int ligne, int colonne)
  42. {
  43.  System.out.println("debut getImage" );
  44.  //return metier.getElt(ligne,colonne);
  45.  return ("./image/vide.jpg" );
  46. }
  47. public int getNbLigne () { return (metier.getNbLigne()); }
  48. public int getNbColonne () { return (metier.getNbColonne()); }
  49. public String getMessage () { return (message); }
  50. public int getNbPas () { return (metier.getNbPas()); }
  51. public static void main (String[] arg)
  52. {
  53.  Controleur ctrl = new Controleur();
  54. }
  55. }

Message cité 1 fois
Message édité par valoutux le 19-01-2011 à 22:19:10
n°2050336
mr simon
Posté le 19-01-2011 à 22:55:06  profilanswer
 

valoutux a écrit :

Code :
  1. /*============== Snake classe Controleur ==============*/
  2. public class Controleur
  3. {
  4. private Metier metier;
  5.         /* ... */
  6. public Controleur()
  7. {
  8.  Metier metier = new Metier(5,5,11,11); //initialisation de metier.
  9.     /* ... */
  10. }



Cette initialisation ne va initialiser la variable metier de l'objet controleur (this.metier), mais un variable temporaire. Donc, this.metier est null, d'ou l'exception.
 
Il faut donc faire:

Code :
  1. this.metier = new Metier(5,5,11,11);


n°2050337
mr simon
Posté le 19-01-2011 à 23:04:42  profilanswer
 

Par ailleurs, apprenez a utiliser un debugger!!! Ce genre d'erreur se detecte et se corrige en ... 30 secondes ?
 
Je n'ai jamais compris pourquoi aucun prof d'informatique ne montre comment s'en servir. C'est pourtant un outils primordial pour le developpeur (et ce n'est pas comme si avec Eclispe, NetBeans ou Visual se soit difficile !!!)
 
 
 

n°2050338
Guillaumux
Posté le 19-01-2011 à 23:07:09  profilanswer
 

Super, je te remercie, ça marche.
 
Bonne soirée

n°2050339
esox_ch
Posté le 19-01-2011 à 23:13:32  profilanswer
 

ou même sans debugger ... tu y vas à grands coups de System.out.print et tu t'en sors .... Ahh ces jeunes qui savent plus se débrouiller par eux-mêmes :D


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°2050340
valoutux
Posté le 19-01-2011 à 23:31:05  profilanswer
 

On l'a fait le debugger par System.out.print mais cela nous menaient sur une fausse piste :) Merci bien en tout cas !

n°2050341
mr simon
Posté le 19-01-2011 à 23:40:35  profilanswer
 

esox_ch a écrit :

ou même sans debugger ... tu y vas à grands coups de System.out.print et tu t'en sors .... Ahh ces jeunes qui savent plus se débrouiller par eux-mêmes :D


Bien sur ... mais apprendre a utiliser un debugger n'est jamais du temps de perdu !


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Problème java.lang.NullPointerException

 

Sujets relatifs
Afficher données dans jtext par rapport sélectio nom et prénom javaprobleme avec mon site internet sous firefox
problème d'étirement image sous firefox[RESOLU][javascript] problème de repositionnement d'élément
Récupérer données dans une BDD par rapport au nom et prénom javaProbleme IHM, JPanel
Problème formulaire de contactProblème de la Socket en C sous linux
Problème java.lang.NullPointerException 
Plus de sujets relatifs à : Problème java.lang.NullPointerException


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR