Problème java.lang.NullPointerException

Problème java.lang.NullPointerException - Java - Programmation

Marsh Posté le 19-01-2011 à 21:54:18    

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
Reply

Marsh Posté le 19-01-2011 à 21:54:18   

Reply

Marsh Posté le 19-01-2011 à 22:06:26    

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
Reply

Marsh Posté le 19-01-2011 à 22:11:24    

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
Reply

Marsh Posté le 19-01-2011 à 22:13:22    

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
Reply

Marsh Posté le 19-01-2011 à 22:55:06    

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);


Reply

Marsh Posté le 19-01-2011 à 23:04:42    

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

Reply

Marsh Posté le 19-01-2011 à 23:07:09    

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

Reply

Marsh Posté le 19-01-2011 à 23:13:32    

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
Reply

Marsh Posté le 19-01-2011 à 23:31:05    

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

Reply

Marsh Posté le 19-01-2011 à 23:40:35    

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 !

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed