Probleme bouton retourne nul

Probleme bouton retourne nul - Java - Programmation

Marsh Posté le 03-02-2010 à 15:57:31    

Bonjours,
J'ai vraiment besoin d'aide et je m'excuse car c'est la premiére fois que je viens sur un forum d'aide donc si je vais des erreurs desolé. JE suis entrain de programmé un programme de tamagoshi avec Java (sous eclipse) et je dois le rendre demain. J'ai perdu tout mon travail que j'avais fait avant et je ne sais pas comment.
Mon erreur se produit quand je veux nourrir avec mon tama (via un bouton) mais quand j'appuie dessus voici l'erreur:
 
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
 at tamagoshi.graphic.TamaGameGraphic.Mange(TamaGameGraphic.java:213)
 at tamagoshi.graphic.TamaFrame$1.actionPerformed(TamaFrame.java:48)
 at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
 at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
 at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
 at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
 at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
 at java.awt.Component.processMouseEvent(Component.java:6263)
 at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
 at java.awt.Component.processEvent(Component.java:6028)
 at java.awt.Container.processEvent(Container.java:2041)
 at java.awt.Component.dispatchEventImpl(Component.java:4630)
 at java.awt.Container.dispatchEventImpl(Container.java:2099)
 at java.awt.Component.dispatchEvent(Component.java:4460)
 at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
 at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
 at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
 at java.awt.Container.dispatchEventImpl(Container.java:2085)
 at java.awt.Window.dispatchEventImpl(Window.java:2475)
 at java.awt.Component.dispatchEvent(Component.java:4460)
 at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
 at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
 at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
 at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
 at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
 at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
 at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
 
Voici ce que contient mon code pour le bouton (je ne mets que ce que j'utilise pour le bouton je ne vous montre pas tout mon code):
Dans TamaFrame j'ai :

Code :
  1. public void init(){
  2.  bnourrir.addActionListener(new ActionListener(){
  3.   public void actionPerformed(ActionEvent e){
  4.    TamaGameGraphic.Mange();
  5.   }});
  6. }
  7. public JButton getBnourrir() {
  8.  return bnourrir;
  9. }


Dans TamaGameGraphic :

Code :
  1. public static ArrayList<Tamagoshi> listeCourse;
  2. private static boolean Mange;
  3. public TamaGameGraphic(){
  4.  listeCourse = new ArrayList<Tamagoshi>() ;
  5. }
  6. public void initialisation() {
  7.  for(int j=0; j<nbtama;j++){
  8.   int index= (int) (Math.random()*listeNom.size());
  9.   double nb = Math.random();
  10.   Tamagoshi t = null;
  11.   nom = listeNom.get(index);
  12.   //création des tamagoshis avec leur attribution pour un nom
  13.   if (nb>0.5){
  14.    t = new GrosMangeur(nom);
  15.   }
  16.   else {
  17.    t = new GrosJoueur(nom);
  18.   }
  19.   listeDepart.add(t);
  20.   listeCourse.add(t);
  21. }
  22. public static void Mange(){
  23.  for (Tamagoshi tama : listeCourse){
  24.   tama.getTamaFrame().getBnourrir().setEnabled(false);
  25.  }
  26.  Mange=true;
  27.  test();
  28. }


Dans tamagoshi :

Code :
  1. public TamaFrame getTamaFrame() {
  2.  // TODO Auto-generated method stub
  3.  return TamaFrame;
  4. }


J'espére que j'ai été assez clair sinon je suis à vous entiere disposition.


Message édité par chaisel le 04-02-2010 à 10:58:44
Reply

Marsh Posté le 03-02-2010 à 15:57:31   

Reply

Marsh Posté le 04-02-2010 à 10:09:23    

premier conseil, sur le forum, utilise les balises [code ], sinon le code est illisible. dans ton cas tu peux même mettre [code =java] pour avoir la colo syntaxique qui va bien.

 

ensuite, pour tes dév, commence par respecter les conventions de nommages du langage. en java, les attributs et les méthodes commencent par des minuscules (méthode et attribut Mange notamment). ensuite je vois pas trop pourquoi certains de tes attributs et méthodes sont statiques.

 

enfin, je suppose que la ligne 213 de TamaGameGraphic.java est

Code :
  1. tama.getTamaFrame().getBnourrir().setEnabled(false);
 

essaie de faire du débogage pour savoir si c'est le getTamaFrame() ou le getBnourrir() qui te renvoie null.


Message édité par pataluc le 04-02-2010 à 10:09:51
Reply

Marsh Posté le 04-02-2010 à 11:03:51    

Oui c'est bien la ligne que tu as mis qui me pose des probleme.
 
J'ai fait un  

Code :
  1. System.out.println(tama.getTamaFrame());


 
Et sa me renvoie null. Mais je ne comprend pas pourquoi.

Reply

Marsh Posté le 04-02-2010 à 11:18:16    

mets nous un peu plus de code, parce que la on peut pas trouver avec le peu que tu mets.  
 
mais je pense que tu as un pb de conception, avec tes éléments statiques et les autres.

Reply

Marsh Posté le 04-02-2010 à 11:27:14    

Je vais vous mettre tout le code de TamaFrame:

Code :
  1. package tamagoshi.graphic;
  2. import java.awt.BorderLayout;
  3. import java.awt.event.ActionEvent;
  4. import java.awt.event.ActionListener;
  5. import javax.swing.JButton;
  6. import javax.swing.JFrame;
  7. import javax.swing.JPanel;
  8. import javax.swing.JTextPane;
  9. import tamagoshi.tamagoshis.Tamagoshi;
  10. @SuppressWarnings("serial" )
  11. public class TamaFrame extends JFrame{
  12. private JButton bnourrir, bjouer;
  13. private JTextPane texte;
  14. private JPanel PartieSud= new JPanel();
  15. private Tamagoshi montama;
  16. public TamaFrame(Tamagoshi t){
  17.  montama=t;
  18.  init();
  19. }
  20. public void init(){
  21.  //add(new TamaJPanel());
  22.  getContentPane().removeAll();
  23.  this.bnourrir = new JButton("Nourrir" );
  24.  this.bjouer = new JButton("Jouer" );
  25.  texte = new JTextPane();
  26.  this.add("North",texte);
  27.  this.add("Center",new TamaJPanel());
  28.  add(PartieSud,BorderLayout.SOUTH);
  29.  PartieSud.add("South",bnourrir);
  30.  PartieSud.add("South",bjouer);
  31.  repaint(); /*rafraichi la fenetre*/
  32.  bnourrir.addActionListener(new ActionListener(){
  33.   public void actionPerformed(ActionEvent e){
  34.    TamaGameGraphic.AManger();
  35.   }});
  36.  bjouer.addActionListener(new ActionListener(){
  37.   public void actionPerformed(ActionEvent e){
  38.    TamaGameGraphic.AJouer();
  39.   }});
  40. }
  41. public JButton getBjouer() {
  42.  return bjouer;
  43. }
  44. public JTextPane getTexte() {
  45.  return texte;
  46. }
  47. public Tamagoshi getMontama() {
  48.  return montama;
  49. }
  50. public JButton getBnourrir() {
  51.  return bnourrir;
  52. }
  53. }


 
 
le code de Tamagoshi

Code :
  1. package tamagoshi.tamagoshis;
  2. import tamagoshi.graphic.TamaFrame;
  3. /*import java.util.Random;*/
  4. public class Tamagoshi {
  5. public int getAge() {
  6.  return age;
  7. }
  8. public int getEnergy() {
  9.  return energy;
  10. }
  11. public int getFun() {
  12.  return fun;
  13. }
  14. public int getMaxFun(){
  15.  return maxFun;
  16. }
  17. public void setAge(int age) {
  18.  this.age = age;                     
  19. }
  20. private  int age;
  21. private  int maxEnergy;
  22. protected  int energy;
  23. protected int fun;
  24. private int maxFun;
  25. public  String name;
  26. public static  int lifeTime=10;
  27. private String parle;
  28.  TamaFrame TamaFrame;
  29. /*private Random rdm;*/
  30. public Tamagoshi(String nom){
  31.  name=nom;
  32.  age=0;
  33.  maxEnergy= (int) (Math.random()*5)+5; /*mettre le mini à l'exterieur des parenthéses, puis calculer le max*/
  34.  energy=(int) (Math.random()*5)+3;
  35.  fun=(int) (Math.random()*5)+3;
  36.  maxFun= (int) (Math.random()*5)+5;
  37. }
  38. public  String parleM(){
  39.  if (energy >= 5 )
  40.   {
  41.   parle =("L'état de " + this.name + " est heureux. Mon énergie est de " + this.energy);
  42.   }
  43.  else
  44.   {
  45.   parle = ("L'état de " + this.name + " est affamé. Mon énergie est de " + this.energy);
  46.   }
  47.  return parle;
  48. }
  49. public  String parleJ(){
  50.  if (fun >= 5 )
  51.   {
  52.   parle=("L'état de " + this.name + " est heureux. Mon fun est de " + this.fun);
  53.   }
  54.  else
  55.   {
  56.   parle=("L'état de " + this.name + " est affamé. Mon fun est de " + this.fun);
  57.   }
  58.  return parle;
  59. }
  60. public boolean mange(){
  61.  System.out.println();
  62.  System.out.println("sdfsdf" );
  63.  int manger = (int) (Math.random()*3)+1;
  64.  if (energy < maxEnergy)
  65.   {
  66.   energy = energy + manger;
  67.   return true;
  68.   }
  69.  else
  70.   return false;
  71. }
  72. public boolean joue(){
  73.  System.out.println();
  74.  int jouer = (int) (Math.random()*3)+1;
  75.  if (fun < maxFun)
  76.   {
  77.   fun = fun + jouer;
  78.   return true;
  79.   }
  80.  else
  81.   return false;
  82. }
  83. public boolean consommeFun(){
  84.  System.out.println();
  85.  this.fun= this.fun-1;
  86.  System.out.println("Fun restant : " + this.fun);
  87.  if(this.fun <=0)
  88.  {
  89.   return false;
  90.  }
  91.  else
  92.   return true;
  93. }
  94. public boolean consommeEnergie(){
  95.  System.out.println();
  96.  this.energy= this.energy-1;
  97.  System.out.println("Energie restant : " + this.energy);
  98.  if(this.energy <=0)
  99.  {
  100.   return false;
  101.  }
  102.  else
  103.   return true;
  104. }
  105. public boolean VifMort(){
  106.  if (this.energy<=0 && this.fun<=0){
  107.   return false;
  108.  }
  109.  else
  110.   return true;
  111. }
  112. @Override
  113.   public String toString() {
  114.  /*
  115.  System.out.println("Le nom du tamagoshis est : " +this.name);
  116.  System.out.println("L'énergie max est : " + this.maxEnergy);
  117.  System.out.println("L'énergie est : " + this.energy);
  118.  System.out.println("La vie du tamagoshis est : " + Tamagoshi.lifeTime );
  119.  */
  120.  return super.toString();
  121. }
  122. public String getName() {
  123.  // TODO Auto-generated method stub
  124.  return name;
  125. }
  126. public TamaFrame getTamaFrame() {
  127.  return TamaFrame;
  128. }
  129. }


 
et une partie du code de tamaGameGraphic

Code :
  1. package tamagoshi.graphic;
  2. import java.awt.event.ActionEvent;
  3. import java.awt.event.ActionListener;
  4. import java.awt.event.KeyEvent;
  5. import java.util.ArrayList;
  6. import javax.swing.JFrame;
  7. import javax.swing.JMenu;
  8. import javax.swing.JMenuBar;
  9. import javax.swing.JMenuItem;
  10. import javax.swing.JOptionPane;
  11. import javax.swing.JTextArea;
  12. import tamagoshi.jeu.GrosJoueur;
  13. import tamagoshi.jeu.GrosMangeur;
  14. import tamagoshi.tamagoshis.Tamagoshi;
  15. @SuppressWarnings("serial" )
  16. public class TamaGameGraphic extends JFrame {
  17. private static ArrayList<Tamagoshi> listeDepart;
  18. public static ArrayList<Tamagoshi> listeCourse;
  19. private ArrayList<TamaFrame> listeFrame;
  20. private ArrayList<String> listeNom;
  21. private int nbtama=0;
  22. private static JTextArea textA;
  23. private static boolean mange;
  24. private static boolean jeu;
  25. private static int cycle=0;
  26. //C'est 2 variable permettront de positionner les fenetre des tamas sur l'écran
  27. private int col=0;
  28. private int lig=0;
  29. private static String nom;
  30. public TamaGameGraphic(){
  31.  listeDepart = new ArrayList<Tamagoshi>() ;
  32.  listeCourse = new ArrayList<Tamagoshi>() ;
  33.  listeFrame = new ArrayList<TamaFrame>();
  34.  listeNom = new ArrayList<String>();
  35.  listeNom.add("Toto" );
  36.  listeNom.add("Pierre" );
  37.  listeNom.add("Paul" );
  38.  listeNom.add("Jack" );
  39.  listeNom.add("Nicky" );
  40.  listeNom.add("Larson" );
  41.  listeNom.add("Seiya" );
  42.  listeNom.add("Albator" );
  43.  fenetre();
  44. }
  45. ....
  46. public static void AManger(){
  47.  for (Tamagoshi tama : listeCourse){
  48.   System.out.println(tama.getTamaFrame());
  49.   tama.getTamaFrame().getBnourrir().setEnabled(false);
  50.  }
  51.  mange=true;
  52.  test();
  53. }
  54. public static void AJouer(){
  55.  for (Tamagoshi tama : listeCourse){
  56.   tama.getTamaFrame().getBjouer().setEnabled(false);
  57.  }
  58.  jeu=true;
  59.  test();
  60. }
  61. public static void test(){
  62.  if (mange == true && jeu == true){
  63.    cycle++;
  64.    cycleTama();
  65.  }
  66. }
  67. ...


 
Je pense que je vous ai mis tout le nécessaire. Le reste est du code qui marche (création de ma fenêtre et des tama) ou du code qui doit se lancer qu'après avoir utiliser les bouton.

Reply

Marsh Posté le 04-02-2010 à 11:36:59    

tu n'affectes jamais de valeur à Tamaframe... :spamafote:

Reply

Marsh Posté le 04-02-2010 à 11:46:07    

En fait, j'avais oublié de rajouté sa dans TamaGameGraphic:

Code :
  1. public void initialisation() {
  2.  for(int j=0; j<nbtama;j++){
  3.   int index= (int) (Math.random()*listeNom.size());
  4.   double nb = Math.random();
  5.   Tamagoshi t = null;
  6.   nom = listeNom.get(index);
  7.   //création des tamagoshis avec leur attribution pour un nom
  8.   if (nb>0.5){
  9.    t = new GrosMangeur(nom);
  10.   }
  11.   else {
  12.    t = new GrosJoueur(nom);
  13.   }
  14.   listeDepart.add(t);
  15.   listeCourse.add(t);
  16.   listeNom.remove(nom);
  17.   TamaFrame tamaF = new TamaFrame(t);
  18.   listeFrame.add(tamaF);
  19.   //positionnement des fenetres selon le nombre de tamagoshis que l'on veut
  20.   tamaF.setSize(300, 350);
  21.   tamaF.setLocation(col,lig);
  22.   col=col+300;
  23.   if (col==1200)
  24.   {
  25.    col=0;
  26.    lig=lig+350;
  27.   }
  28.   tamaF.setTitle(t.getName());
  29.   tamaF.setDefaultCloseOperation(HIDE_ON_CLOSE);
  30.   tamaF.setVisible(true);
  31.  }
  32.  textA.append("----------Nouvelle Partie----------\n Il y a " + nbtama + " tamagoshis à gérer\n" );
  33.  //cycleTama();
  34. }


 
Dans ce code j'ai  
   TamaFrame tamaF = new TamaFrame(t);
   listeFrame.add(tamaF);

et je pensais que c'est sa qui permet de donné une valeur.
Mais si c'est pas ça alors je fais comment?? (désoler mais je suis mauvais en java)

Reply

Marsh Posté le 04-02-2010 à 13:45:52    

tu pensais qu'en le mettant dans la liste listeFrame il allait apparaitre magiquement dans Tamaframe?
 
honnetement je ne sais pas quoi te dire, soit tu rajoute qqpart à l'arrache une affectation de ta frame à tamaframe, et ca marchera peut être mais ce sera crade, soit tu revois tout ton code avec une vraie perspective Objet, parce que la tu es visiblement mal parti.
:jap:

Reply

Sujets relatifs:

Leave a Replay

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