Problème erreur pointeur null exception n'ont justifier [Résolu]

Messages postés
295
Date d'inscription
vendredi 26 avril 2013
Statut
Membre
Dernière intervention
15 juillet 2015
- - Dernière réponse : 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
Afficher la suite 

1 réponse

Messages postés
16005
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
16 août 2019
86
0
Merci
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...
KX
Messages postés
16005
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
16 août 2019
86 > EnguerrandP
Messages postés
295
Date d'inscription
vendredi 26 avril 2013
Statut
Membre
Dernière intervention
15 juillet 2015
-
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...
EnguerrandP
Messages postés
295
Date d'inscription
vendredi 26 avril 2013
Statut
Membre
Dernière intervention
15 juillet 2015
> KX
Messages postés
16005
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
16 août 2019
-
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);
		}
	}
}


KX
Messages postés
16005
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
16 août 2019
86 > EnguerrandP
Messages postés
295
Date d'inscription
vendredi 26 avril 2013
Statut
Membre
Dernière intervention
15 juillet 2015
-
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();
EnguerrandP
Messages postés
295
Date d'inscription
vendredi 26 avril 2013
Statut
Membre
Dernière intervention
15 juillet 2015
> KX
Messages postés
16005
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
16 août 2019
-
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.
EnguerrandP
Messages postés
295
Date d'inscription
vendredi 26 avril 2013
Statut
Membre
Dernière intervention
15 juillet 2015
-
la solution:

public class Ecouteur implements ActionListener{
static Pendu game;
Commenter la réponse de KX