Java.lang.NullPointerException [Résolu/Fermé]

Messages postés
35
Date d'inscription
vendredi 15 juin 2007
Statut
Membre
Dernière intervention
31 juillet 2008
-
Bonjour,
je débute en Java, je suis tombé sur la fameuse java.lang.NullPointerException
mais que dois faire pour régler ce problème?
Je sais certainement qu'un pointeur ne dois pointer justement sur rien, ou qu'il existe un pb d'indice,
mais en relisant mon code je ne vois pas ce qui provoque ceci,
si quelqu'un peut m'aider, ca m'aiderait énormément.

En gros :
J'ai 3 classes, une fentre et 2 panneaux.
J'ai un panneau muni d'écouteurs,
mais dés que je veux utiliser des propriétés des 2 autres classes : java.lang.NullPointerException s'affiche

/*
 * Main.java
 *
 * Created on 7 janvier 2008, 19:21
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package fab_paint;

import java.awt.BorderLayout;
import java.awt.Container;
import javax.swing.JFrame;

/**
 *
 * @author Medion
 */
public class Main {
    
    private JFrame fenetre;
    private int largeur = 500, hauteur=300;
    private int horizontale = 300 , verticale = 200;
    private Panneau pan;
    private Ardoise ard;
    private java.util.ArrayList<Forme> tabForme = new java.util.ArrayList<Forme>();
    
    /** Creates a new instance of Main */
    public Main() {
        fenetre = new JFrame();
        fenetre.setTitle("Fab_Paint");
        fenetre.setSize(largeur,hauteur);
        fenetre.setLocation(horizontale, verticale);
        pan = new Panneau();
        fenetre.add(BorderLayout.SOUTH, pan);
        ard = new Ardoise();
        fenetre.add(ard);
        fenetre.setVisible(true);
    }
    
    public Panneau get_pan(){
        return pan;
    }
    
    public java.util.ArrayList get_tabForme(){
        return this.tabForme;
    }
    
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        Main m = new Main();
    }
    
}
/*
 * Panneau.java
 *
 * Created on 7 janvier 2008, 19:25
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package fab_paint;

import com.sun.org.apache.bcel.internal.classfile.JavaClass;

/**
 *
 * @author Medion
 */
public class Panneau extends javax.swing.JPanel{
    
    private javax.swing.ButtonGroup bg;
    private javax.swing.JRadioButton jrb1, jrb2;
    
    /** Creates a new instance of Panneau */
    public Panneau() {
        setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.RIGHT));
        setBackground(java.awt.Color.YELLOW);
        bg = new javax.swing.ButtonGroup();
        jrb1 = new javax.swing.JRadioButton("Cercle", false);
        jrb2 = new javax.swing.JRadioButton("Rectangle", false);
        bg.add(jrb1);
        bg.add(jrb2);
        add(jrb1);
        add(jrb2);
    }
    
    public boolean selec_ovale(){
        return (jrb1.isSelected()==true && jrb2.isSelected()==false); 
    }
    
    public boolean selec_rect(){
        return (jrb1.isSelected()==false && jrb2.isSelected()==true); 
    }
    
}
/*
 * Ardoise.java
 *
 * Created on 7 janvier 2008, 19:24
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package fab_paint;

import java.awt.event.MouseEvent;

/**
 *
 * @author Medion
 */
public class Ardoise extends javax.swing.JPanel implements java.awt.event.MouseListener, java.awt.event.MouseMotionListener{
    
    private java.awt.Cursor c;
    private int x, y;
    private Main m;
    private java.awt.Graphics g;
    private int i_clicked=0, i_pressed=0, i_released=0, 
            i_entered=0, i_exited=0, i_dragged=0, i_moved=0;
    
    /** Creates a new instance of Ardoise */
    public Ardoise() {
        this.addMouseListener(this);
        this.addMouseMotionListener(this);
        setBackground(java.awt.Color.WHITE);
        setCursor(c = new java.awt.Cursor(java.awt.Cursor.CROSSHAIR_CURSOR));
    }

    public void mouseClicked(MouseEvent e) {
        /*Invoked when the mouse button has been clicked (pressed and released) on a component. */
        i_clicked +=1;
        System.out.println("mouseClicked    " + i_clicked + "e.getX() =" + e.getX() + "e.getY()" + e.getY());
    }

    public void mousePressed(MouseEvent e) {
        i_pressed +=1;
        System.out.println("mousePressed    " + i_pressed + "e.getX() =" + e.getX() + "e.getY()" + e.getY());
        this.x=e.getX();
        this.y=e.getY();
    }

    public void mouseReleased(MouseEvent e) {
        i_released +=1;
        System.out.println("mouseReleased   " + i_released + "e.getX() =" + e.getX() + "e.getY()" + e.getY());
        if(m.get_pan().selec_rect()){
            Rectangle r = new Rectangle(this.x,this.y,e.getX(),e.getY());
            System.out.println("Rectangle r");   
        }
        else 
            if(m.get_pan().selec_ovale()){
            Ovale o = new Ovale(this.x,this.y,e.getX(),e.getY());
            System.out.println("Ovale o");   
        }
        else{
            
            Rectangle r = new Rectangle(this.x,this.y,e.getX(),e.getY());
            System.out.println("Rectangle r");
        }
    }

    public void mouseEntered(MouseEvent e) {
        /*Invoked when the mouse enters a component.*/
        i_entered +=1;
        System.out.println("mouseEntered    " + i_entered);        
    }

    public void mouseExited(MouseEvent e) {
        i_exited +=1;
        System.out.println("mouseExited " + i_exited);        
    }

    public void mouseDragged(MouseEvent e) {
        i_dragged +=1;
        System.out.println("mouseDragged    " + i_dragged);      
    }

    public void mouseMoved(MouseEvent e) {
        i_moved +=1;
        System.out.println("mouseMoved  " + i_moved);        
    }


}
Afficher la suite 

4 réponses

Meilleure réponse
2
Merci
Bonjour,

Dans votre classe Ardoise, m n'est jamais initialisé. m.get_pan() renvoi donc un NullPointerException.
Pour régler le problème
* soit modifier le constructeur pour passer m dans la création de ard dans Main :
ard = new Ardoise(this);
avec dans Ardoise
public Ardoise(Main m) {
...
this.m=m;
...
}

* Soit implémenter un setter dans Ardoise :
public void setM(Main m) {
this.m = m;
}
et dans Main :
...
ard = new Ardoise();
ard.setM(this);
...

Codialement,
Jres

Dire « Merci » 2

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 70351 internautes nous ont dit merci ce mois-ci

bonjour j ai le mm probleme mais je ne me retrouve pas du tt ds vos explictions
Ds quel dossier dois je rentrer?options?ou quoi?
mon phone est en anglais
Merci d avance
oui moi aussi mais sauf que moi c'est sur minecraft sa lag a cause de sa
> alexisdu27 -
moi aussi
Messages postés
35
Date d'inscription
vendredi 15 juin 2007
Statut
Membre
Dernière intervention
31 juillet 2008
12
1
Merci
oh merci beaucoup. Je te suis très reconnaissant. Tu m'as beaucoup aidé.
Ca me semble très simple maintenant bien que je n'y ai pas pensé avant.
Ca marche!
1
Merci
bonjour tout le monde!Je suis actuellement en train de faire un projet java qui consiste à évaluer une expression en affichant toutes les étapes et en utilisant une pile.Le problème est que depuis plusieurs jour je ne trouve pas l'erreur lorsque j'exécute le programme il me renvoi : java.lang.NullException

at Pile.sommet(pile.java:16)
at debut2.evaluation(debut2.java:139)
at debut2.main(debut2.java:16)


je sollicite votre aide Merci.

voici ce fameux programme :

import java.util.*;
import java.util.StringTokenizer;


public class debut2 {


public static void main (String args []) {
String ok=new String("oui");
do {

TextWindow.printLine("Donner l'expression a evaluer : ") ;
String expression=TextWindow.readString();
StringTokenizer e=new StringTokenizer(expression);

evaluation(e);



TextWindow.printLine("voulez vous recommencer?");
ok=TextWindow.readString();
} while(ok.equals("oui"));

}





public static void evaluation (StringTokenizer e) {

Pile p = new Pile();
String op=new String("+");
String w;
String z;
int b;
int c;
int resa;
String resb;
String ope;

while (e.hasMoreTokens()) {

String i = e.nextToken();

if (estunnombre(i)) {


p.empiler(i);



}


else if (estunoperateur(i)) {


if (estprioritaire(op,i)) {




p.empiler(e.nextToken());

w = p.sommet();
b=Integer.parseInt(w);


p.depiler();
ope = p.sommet();

p.depiler();
z = p.sommet();
c=Integer.parseInt(z);


p.depiler();
resa=calculer(b,ope,c);
resb=Integer.toString(resa);
p.empiler(resb);

} /* fin de si estprioritaire */



else {

if (!(resteexpression(p))) {
p.empiler(i); } /* fin !resteexpression */


else {


w = p.sommet();
b=Integer.parseInt(w);


p.depiler();
ope = p.sommet();

p.depiler();
z = p.sommet();
c=Integer.parseInt(z);
p.depiler();
resa=calculer(b,ope,c);
resb=Integer.toString(resa);
p.empiler(resb);


} /* fin de else */

op=i;


} /* fin de else */


} /* fin de else if */



} /* fin de while */




if (resteexpression(p)) {

w = p.sommet();
b=Integer.parseInt(w);


p.depiler();
ope = p.sommet();

p.depiler();
z = p.sommet();
c=Integer.parseInt(z);
p.depiler();
resa=calculer(b,ope,c);
resb=Integer.toString(resa);
p.empiler(resb);



} /* fin de if */




} /* fin de evaluation */



public static boolean estsuperieur(String premier , String deuxieme) {

if ( (deuxieme.equals("x"))||(deuxieme.equals("/"))) {

return true; }

else if ((deuxieme.equals("+"))||(deuxieme.equals("-"))) {

if ((premier.equals("*"))||(premier.equals("/"))) {
return false; }

else {
return true; }

}

else { return false ; }


}









public static boolean estunnombre(String valeur) {

for (int i = 0; i < valeur.length(); i++) {

char c = valeur.charAt(i);
if(c<'0' || c>'9') return false;
}
return true;

}





public static boolean estunoperateur(String x) {

if (x.equals("+") || x.equals("-") || x.equals("*")|| x.equals("/")) {

return true; }

else { return false; }

}





public static int calculer(int x, String a,int y) {
if ( a.equals("+")) {
return x+y ; }

else if ( a.equals("*")) {
return x*y ; }

else if ( a.equals("-")) {
return x-y ; }

else if ( a.equals("/")) {
return x/y ; }

else return -1 ;

}


public static boolean estprioritaire(String premier , String deuxieme) {

if ( (deuxieme.equals("x"))||(deuxieme.equals("/"))) {

return true; }


else { return false ; }

}




public static boolean resteexpression(Pile q) {

String a=q.sommet();
q.depiler();

if (q.pileVide()) {

q.empiler(a);

return false; }

else {
q.empiler(a);

return true; }

}



}
Messages postés
35
Date d'inscription
vendredi 15 juin 2007
Statut
Membre
Dernière intervention
31 juillet 2008
12
0
Merci
j'ai oublié de préciser que l'erreur se produit dans la dernière classe Ardoise
dans la méthode mouseRelease
à la ligne if(m.get_pan().selec_rect()){

Merci bcp a tout ceux qui auront le courage de se plonger dans le code source