Rechercher : dans
Par :

Java.lang.NullPointerException

Dernière réponse le 28 mar 2008 à 20:54:05 fabien.joubert, le 14 jan 2008 à 14:51:28 
 Signaler ce message aux modérateurs

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);
}

}

Configuration: Windows XP
Internet Explorer 7.0

Meilleures réponses pour « java.lang.NullPointerException » dans :
Java - Caractéristiques du langage VoirFichier source, compilation et machine virtuelle Le fichier source d'un programme écrit en Java est un simple fichier texte dont l'extension est par convention .java. Ce fichier source doit être un fichier texte non formatté, c'est-à-dire un...
Javascript - Introduction au langage Javascript VoirQu'est-ce que le Javascript? Le Javascript est un langage de script incorporé dans un document HTML. Historiquement il s'agit même du premier langage de script pour le Web. Ce langage est un langage de programmation qui permet d'apporter des...

1

fabien.joubert, le 14 jan 2008 à 14:54:17

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

Répondre à fabien.joubert

2

Jres, le 14 jan 2008 à 15:41:45
  • +2

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

Répondre à Jres

3

fabien.joubert, le 14 jan 2008 à 16:00:46

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!

Répondre à fabien.joubert

4

 tomi, le 28 mar 2008 à 20:54:05

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; }

}



}

Répondre à tomi