Problème erreur pointeur null exception n'ont justifier

Résolu
EnguerrandP Messages postés 295 Date d'inscription vendredi 26 avril 2013 Statut Membre Dernière intervention 15 juillet 2015 - 30 mars 2015 à 20:40
EnguerrandP Messages postés 295 Date d'inscription vendredi 26 avril 2013 Statut Membre Dernière intervention 15 juillet 2015 - 31 mars 2015 à 16:54
Bonjour,
Je rencontre un souci avec m'ont code, voila la parti qui me renvoit une erreur :
		if(e.getSource()==fenetre.btn_A){
			char lettre = fenetre.btn_A.getText().charAt(0);
			//System.out.println("lettre : "+lettre); //test OK
			String mot =game.verification(lettre); // erreur
			//System.out.println("mot : "+mot); //test	
			//Teste si le joueur à perdu
			if(mot=="PERDU"){
				fenetre.masqueBouton();
			}else if(mot==game.getMot()){
				fenetre.masqueBouton();
				fenetre.txtfld_Mot.setText("Félicitation");
			}
			fenetre.afficheTiret(mot);
			fenetre.btn_A.setEnabled(false);
		}


j'ai testé la fonction
verification(lettre)
avec la console elle marche très bien, mais des que j'essaiye avec m'ont interface j'ai l'érreur suivante:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at Interface.Ecouteur.actionPerformed(Ecouteur.java:197)
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
	at java.awt.EventQueue.access$400(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue$4.run(Unknown Source)
	at java.awt.EventQueue$4.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)



Je ne comprend pas pourquoi pouvez vous m'aider.
Merci

1 réponse

KX Messages postés 16747 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 9 juillet 2024 127
30 mars 2015 à 20:52
Bonjour,

C'est game qui est égal à null ici.
Si tu le NullPointerException était à l'intérieur de verification tu aurais une ligne de plus dans la stack, or là elle s'arrête sur la ligne 197...
0
EnguerrandP Messages postés 295 Date d'inscription vendredi 26 avril 2013 Statut Membre Dernière intervention 15 juillet 2015 1
30 mars 2015 à 21:54
Je vient de tester en effect game est null
Voila le code qu'il y a dans mon ecoute:
public class Ecouteur implements ActionListener{
	private Pendu game;
	
	private Fenetre fenetre;
	public Ecouteur(Fenetre fenetre) {
		this.fenetre=fenetre;
	}

	public void actionPerformed(ActionEvent e) {
		if(e.getSource()==fenetre.btn_newGame){
			// création de l'objet pendue
			this.game =new Pendu();
			int v_nbLettre = game.getMot().length();
			
			// Ajout des tirets
			fenetre.afficheTiret(game.creeMotATroue());
						
			// Rendre les boutons actif
			fenetre.btn_A.setEnabled(true);
			fenetre.btn_B.setEnabled(true);
			fenetre.btn_C.setEnabled(true);
			fenetre.btn_D.setEnabled(true);
			fenetre.btn_E.setEnabled(true);
			fenetre.btn_F.setEnabled(true);
			fenetre.btn_G.setEnabled(true);
			fenetre.btn_H.setEnabled(true);
			fenetre.btn_I.setEnabled(true);
			fenetre.btn_J.setEnabled(true);
			fenetre.btn_K.setEnabled(true);
			fenetre.btn_L.setEnabled(true);
			fenetre.btn_M.setEnabled(true);
			fenetre.btn_N.setEnabled(true);
			fenetre.btn_O.setEnabled(true);
			fenetre.btn_P.setEnabled(true);
			fenetre.btn_Q.setEnabled(true);
			fenetre.btn_R.setEnabled(true);
			fenetre.btn_S.setEnabled(true);
			fenetre.btn_T.setEnabled(true);
			fenetre.btn_U.setEnabled(true);
			fenetre.btn_V.setEnabled(true);
			fenetre.btn_W.setEnabled(true);
			fenetre.btn_X.setEnabled(true);
			fenetre.btn_Y.setEnabled(true);
			fenetre.btn_Z.setEnabled(true);
			
			/*
			//test OK
			String text = new Integer(v_nbLettre).toString();
			//fenetre.txtfld_score.setText("mot: "+game.getMot()+"taille : "+text);
			fenetre.txtfld_score.setText("taille : "+text);*/
		}


pourquoi mon objet game ne prend pas la valeur du nouveau pendu ?

Merci pour ton aide
0
KX Messages postés 16747 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 9 juillet 2024 127 > EnguerrandP Messages postés 295 Date d'inscription vendredi 26 avril 2013 Statut Membre Dernière intervention 15 juillet 2015
30 mars 2015 à 22:05
Les événements peuvent s'exécuter dans n'importe quel ordre.

Si tu appuies sur btn_A l'objet sera initialisé dans l'objet Ecouteur.
Mais si tu appuies sur btn_newGame en premier l'objet vaudra null puisqu'il n'aura pas été initialisé. Cela peut également arriver si btn_newGame ne s'exécute pas avec le même objet Ecouteur que btn_A, dans ce cas tu auras deux objets Ecouteur, le premier initialisé, le second qui a null.

Ce qu'il faudrait expliquer c'est où se situe ton premier code par rapport au deuxième...
0
EnguerrandP Messages postés 295 Date d'inscription vendredi 26 avril 2013 Statut Membre Dernière intervention 15 juillet 2015 1 > KX Messages postés 16747 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 9 juillet 2024
30 mars 2015 à 22:08
Les deux sont au même endroit voila la classe au complet:
package Interface;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import Metier.Pendu;

public class Ecouteur implements ActionListener{
	Pendu game;
	
	private Fenetre fenetre;
	public Ecouteur(Fenetre fenetre) {
		this.fenetre=fenetre;
	}

	public void actionPerformed(ActionEvent e) {
		if(e.getSource()==fenetre.btn_newGame){
			// création de l'objet pendue
			Pendu game =new Pendu();
			int v_nbLettre = game.getMot().length();
			
			// Ajout des tirets
			fenetre.afficheTiret(game.creeMotATroue());
						
			// Rendre les boutons actif
			fenetre.btn_A.setEnabled(true);
			fenetre.btn_B.setEnabled(true);
			fenetre.btn_C.setEnabled(true);
			fenetre.btn_D.setEnabled(true);
			fenetre.btn_E.setEnabled(true);
			fenetre.btn_F.setEnabled(true);
			fenetre.btn_G.setEnabled(true);
			fenetre.btn_H.setEnabled(true);
			fenetre.btn_I.setEnabled(true);
			fenetre.btn_J.setEnabled(true);
			fenetre.btn_K.setEnabled(true);
			fenetre.btn_L.setEnabled(true);
			fenetre.btn_M.setEnabled(true);
			fenetre.btn_N.setEnabled(true);
			fenetre.btn_O.setEnabled(true);
			fenetre.btn_P.setEnabled(true);
			fenetre.btn_Q.setEnabled(true);
			fenetre.btn_R.setEnabled(true);
			fenetre.btn_S.setEnabled(true);
			fenetre.btn_T.setEnabled(true);
			fenetre.btn_U.setEnabled(true);
			fenetre.btn_V.setEnabled(true);
			fenetre.btn_W.setEnabled(true);
			fenetre.btn_X.setEnabled(true);
			fenetre.btn_Y.setEnabled(true);
			fenetre.btn_Z.setEnabled(true);
			
			/*
			//test OK
			String text = new Integer(v_nbLettre).toString();
			//fenetre.txtfld_score.setText("mot: "+game.getMot()+"taille : "+text);
			fenetre.txtfld_score.setText("taille : "+text);*/
		}
		
		if(e.getSource()==fenetre.btn_A){
			System.out.println("mot : "+game.getMot()); //test 
			char lettre = fenetre.btn_A.getText().charAt(0);
			//System.out.println("lettre : "+lettre); //test OK
			String mot =game.verification(lettre); // erreur
			//System.out.println("mot : "+mot); //test	
			//Teste si le joueur à perdu
			if(mot=="PERDU"){
				fenetre.masqueBouton();
			}else if(mot==game.getMot()){
				fenetre.masqueBouton();
				fenetre.txtfld_Mot.setText("Félicitation");
			}
			fenetre.afficheTiret(mot);
			fenetre.btn_A.setEnabled(false);
		}
		
		if(e.getSource()==fenetre.btn_B){
			char lettre = fenetre.btn_B.getText().charAt(0);
			String mot =game.verification(lettre); 
			if(mot=="PERDU"){
				fenetre.masqueBouton();
			}else if(mot==game.getMot()){
				fenetre.masqueBouton();
				fenetre.txtfld_Mot.setText("Félicitation");
			}
			fenetre.afficheTiret(mot);
			fenetre.btn_B.setEnabled(false);			
		}
		
		if(e.getSource()==fenetre.btn_C){
			fenetre.btn_C.setEnabled(false);
						
		}
		
		if(e.getSource()==fenetre.btn_D){
			fenetre.btn_D.setEnabled(false);
					
		}
		
		if(e.getSource()==fenetre.btn_E){
			fenetre.btn_E.setEnabled(false);
						
		}
		
		if(e.getSource()==fenetre.btn_F){
			fenetre.btn_F.setEnabled(false);
					
		}
		
		if(e.getSource()==fenetre.btn_G){
			fenetre.btn_G.setEnabled(false);
					
		}
		
		if(e.getSource()==fenetre.btn_H){
			fenetre.btn_H.setEnabled(false);
					
		}
		
		if(e.getSource()==fenetre.btn_I){
			fenetre.btn_I.setEnabled(false);
					
		}
		
		if(e.getSource()==fenetre.btn_J){
			fenetre.btn_J.setEnabled(false);
					
		}
		
		if(e.getSource()==fenetre.btn_K){
			fenetre.btn_K.setEnabled(false);
					
		}
		
		if(e.getSource()==fenetre.btn_L){
			fenetre.btn_L.setEnabled(false);
					
		}
		
		if(e.getSource()==fenetre.btn_M){
			fenetre.btn_M.setEnabled(false);
					
		}
		
		if(e.getSource()==fenetre.btn_N){
			fenetre.btn_N.setEnabled(false);
					
		}
		
		if(e.getSource()==fenetre.btn_O){
			fenetre.btn_O.setEnabled(false);
					
		}
		
		if(e.getSource()==fenetre.btn_P){
			fenetre.btn_P.setEnabled(false);
					
		}
		
		if(e.getSource()==fenetre.btn_Q){
			fenetre.btn_Q.setEnabled(false);
					
		}
		
		if(e.getSource()==fenetre.btn_R){
			fenetre.btn_R.setEnabled(false);
					
		}
		
		if(e.getSource()==fenetre.btn_S){
			fenetre.btn_S.setEnabled(false);
					
		}
		
		if(e.getSource()==fenetre.btn_T){
			fenetre.btn_T.setEnabled(false);
					
		}
		
		if(e.getSource()==fenetre.btn_U){
			fenetre.btn_U.setEnabled(false);
					
		}

		if(e.getSource()==fenetre.btn_V){
			fenetre.btn_V.setEnabled(false);
						
		}
		
		if(e.getSource()==fenetre.btn_W){
			fenetre.btn_W.setEnabled(false);
					
		}
		
		if(e.getSource()==fenetre.btn_X){
			fenetre.btn_X.setEnabled(false);
					
		}
		
		if(e.getSource()==fenetre.btn_Y){
			fenetre.btn_Y.setEnabled(false);
					
		}
		
		if(e.getSource()==fenetre.btn_Z){
			fenetre.btn_Z.setEnabled(false);
						
		}
		
		if(e.getSource()==fenetre.btn_quit){
			System.exit(0);
		}
	}
}


0
KX Messages postés 16747 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 9 juillet 2024 127 > EnguerrandP Messages postés 295 Date d'inscription vendredi 26 avril 2013 Statut Membre Dernière intervention 15 juillet 2015
30 mars 2015 à 22:14
Le problème c'est ici :

// création de l'objet pendue
Pendu game =new Pendu();

C'est faux, car tu déclares une deuxième fois la variable game, et c'est cette variable que tu initialises, pas l'attribut de la classe qui reste donc null.

Ce que tu mettais tout à l'heure c'est mieux :
// création de l'objet pendue
this.game =new Pendu();
0
EnguerrandP Messages postés 295 Date d'inscription vendredi 26 avril 2013 Statut Membre Dernière intervention 15 juillet 2015 1 > KX Messages postés 16747 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 9 juillet 2024
30 mars 2015 à 22:17
Ok, j'ai remit le
this.game =new Pendu();

je continu a réfléchir pourquoi se ne veut pas fonctionner est comment faire pour que mon objet game soit utilisable par mes autres boutons.
0
Rejoignez-nous