Java.lang.NullPointerException

Résolu/Fermé
fabien.joubert Messages postés 35 Date d'inscription vendredi 15 juin 2007 Statut Membre Dernière intervention 31 juillet 2008 - Modifié le 28 mars 2008 à 20:54
 nairox - 24 déc. 2015 à 11:45
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);        
    }


}

4 réponses

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
3
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
0
oui moi aussi mais sauf que moi c'est sur minecraft sa lag a cause de sa
0
nairox > alexisdu27
24 déc. 2015 à 11:45
moi aussi
0