Exception in thread "main" java.lang.NullPointerException

fredericg Messages postés 6 Date d'inscription dimanche 5 juin 2005 Statut Membre Dernière intervention 28 juillet 2005 - 27 juil. 2005 à 15:46
dmaillet Messages postés 500 Date d'inscription mercredi 20 août 2003 Statut Membre Dernière intervention 11 juillet 2007 - 28 juil. 2005 à 16:02
Bonjour,

Je souhaite un petit coup de main sur un pb en JAVA. Mon fichier compile correctement mais à l'execution j'obtiens un défaut :

Exception in thread "main" java.lang.NullPointerException
at Ihm.tourne(Ihm.java:312)
at Ihm.main(Ihm.java:336)

Par contre ma fenêtre s'ouvre correctement.

Je n'y comprend rien car le bout de code "tourne" permettant de gerer un réseau Udp est repris d'autres fichiers qui fonctionnent normalement...

Si qqun peut m'aider...je peut lui envoyer mon fichier par mail pour être plus clair...

Merci de votre aide...

12 réponses

dmaillet Messages postés 500 Date d'inscription mercredi 20 août 2003 Statut Membre Dernière intervention 11 juillet 2007
27 juil. 2005 à 16:26
Dans ton IHM, a la ligne 312 dans la methode tourne, tu as un NullPointerException,

tu essaies de faire qqchose avec un objet null... un objet non instantie, ou une reference null.
0
fredericg Messages postés 6 Date d'inscription dimanche 5 juin 2005 Statut Membre Dernière intervention 28 juillet 2005
28 juil. 2005 à 07:40
Ca non plus je ne comprends pas car ma Classe Ihm ne fait pas 300 lignes...!!!

Ou alors là non plus j'ai rien compris....
0
dmaillet Messages postés 500 Date d'inscription mercredi 20 août 2003 Statut Membre Dernière intervention 11 juillet 2007
28 juil. 2005 à 09:13
Fait voir ta classe
0
fredericg Messages postés 6 Date d'inscription dimanche 5 juin 2005 Statut Membre Dernière intervention 28 juillet 2005
28 juil. 2005 à 11:22
Oups...j'ai bien le nbre de ligne...dslé...mais je ne vois pas l'erreur...Merci pour ton aide...

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.net.*;
import java.lang.String.*;
import java.util.Date;

class Panneau extends JPanel {
public void paint( Graphics g ) {
setSize(800,600);
setVisible(true);
super.paint(g);
int Width = size().width;
int Height = size().height;
int LargPanel = (Width*10/10);
int HautPanel = (Height*10/10);

/* ecoute de la souris */
addMouseListener(
new MouseAdapter() {
public void mousePressed( MouseEvent e ) {
repaint();
}});
}}

public class Ihm extends JFrame {
/* création des zones de saisies */
Panneau monPanneau;
JTextField valhummin = new JTextField (5);
JTextField valhummax = new JTextField (5);
JTextField valdebarrosage = new JTextField (5);
JTextField valfinarrosage = new JTextField (5);
JTextField valConsTemp = new JTextField (5);
JTextField valEtatChauff = new JTextField (5);
JTextField valTempCourante = new JTextField (5);
JTextField etatPorte1 = new JTextField (5);
JTextField etatPorte2 = new JTextField (5);
JTextField valNum = new JTextField (5);
JTextField valetatIncendie = new JTextField (5);
JTextField valetatarrosage = new JTextField (5);
JTextField valTauxHum = new JTextField (5);

public Ihm(){

repaint();

setSize(800,600);
monPanneau = new Panneau();
setVisible(true);

/* creation du panneau intrusion */
JPanel intrusion = new JPanel();
intrusion.setSize(100,50);

/* creation du panneau incendie */
JPanel incendie = new JPanel();
incendie.setSize(100,50);

/* creation du panneau humidité*/
JPanel humidite = new JPanel();
humidite.setSize(100,50);

/* creation du panneau de température*/
JPanel temp = new JPanel();
temp.setSize(100,50);

/* creation des labels du panneau humidité*/
JLabel minhum = new JLabel("Valeur min humidité:");
JLabel rien = new JLabel("");
minhum.setSize(10,10);
JLabel maxhum = new JLabel("Valeur max humidité:");
maxhum.setSize(10,10);
JLabel debarrosage = new JLabel("heure de debut d'arrosage");
debarrosage.setSize(10,10);
JLabel finarrosage = new JLabel("heure de fin d'arrosage");
finarrosage.setSize(10,10);
JLabel etatarrosage = new JLabel("Etat pilotage arrosage");
etatarrosage.setSize(10,10);
JLabel tauxHum = new JLabel("Taux d'humidité");
tauxHum.setSize(10,10);

/* placement des objets du panneau humidité */
humidite.setLayout(new GridLayout(6,2));
humidite.add(minhum);
humidite.add(valhummin);
humidite.add(maxhum);
humidite.add(valhummax);
humidite.add(debarrosage);
humidite.add(valdebarrosage);
humidite.add(finarrosage);
humidite.add(valfinarrosage);
humidite.add(etatarrosage);
humidite.add(valetatarrosage);
humidite.add(tauxHum);
humidite.add(valTauxHum);

/* creation des labels du panneau température*/
JLabel consTemp = new JLabel("Consigne de température");
consTemp.setSize(10,10);
JLabel etatChauff = new JLabel("Etat chauffage");
maxhum.setSize(10,10);
JLabel tempCourante = new JLabel("température courante");
tempCourante.setSize(10,10);

/* placement des objets du panneau température */
temp.setLayout(new GridLayout(9,2));
temp.add(consTemp);
temp.add(valConsTemp);
temp.add(etatChauff);
temp.add(valEtatChauff);
temp.add(tempCourante);
temp.add(valTempCourante);

/* creation des labels du panneau intrusion*/
JLabel porte1 = new JLabel(" porte 1");
porte1.setSize(10,10);
JLabel porte2 = new JLabel(" porte 2");
porte2.setSize(10,10);

/* placement des objets du panneau intrusion */
intrusion.setLayout(new GridLayout(6,2));
intrusion.add(porte1);
intrusion.add(etatPorte1);
intrusion.add(porte2);
intrusion.add(etatPorte2);

/* creation des labels du panneau incendie*/
JLabel numero = new JLabel(" N° de TEL composé");
numero.setSize(10,10);
JLabel etatIncendie = new JLabel(" Etat Incendie");
etatIncendie.setSize(10,10);

/* placement des objets du panneau incendie*/
incendie.setLayout(new GridLayout(6,2));
incendie.add(numero);
incendie.add(valNum);
incendie.add(etatIncendie);
incendie.add(valetatIncendie);

/* positionnement des panneaux dans la fenêtre */
/* Ajout du panel choix */
getContentPane().add(humidite,BorderLayout.EAST);
/* Ajout du panel température */
getContentPane().add(temp,BorderLayout.WEST);
/* placement des composants */
getContentPane().add(incendie,BorderLayout.NORTH);
getContentPane().add(intrusion,BorderLayout.SOUTH);

/* gestion de la reaction du bouton Quitter
quitter.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}});*/
setVisible(true);

/* gestion du clavier*/
valhummin.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
String s=valhummin.getText();
int a=Integer.parseInt(s);
// Object valeur=e.getSource();
System.out.println(" "+s);
//System.exit(0);
}});

valhummax.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
String t=valhummax.getText();
int b=Integer.parseInt(t);
// Object valeur=e.getSource();
System.out.println(" "+t);
//System.exit(0);
}});

valdebarrosage.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
String u=valdebarrosage.getText();
int c=Integer.parseInt(u);
// Object valeur=e.getSource();
System.out.println(" "+u);
//System.exit(0);
}});

valfinarrosage.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
String v=valfinarrosage.getText();
int d=Integer.parseInt(v);
// Object valeur=e.getSource();
System.out.println(" "+v);
//System.exit(0);
}});

valConsTemp.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
String w=valConsTemp.getText();
int f=Integer.parseInt(w);
// Object valeur=e.getSource();
System.out.println(" "+w);
//System.exit(0);
}});

/* affichage des valeurs des capteurs */

double afficheradiateur=0, affichetemperature=0, afficheporte1=0, afficheporte2=0
, affichenum=0, afficheincendie=0, affichearrosage=0, affichetauxHum=0;
valEtatChauff.setText(" "+afficheradiateur);
System.out.println("chauffe");
valTempCourante.setText(" "+affichetemperature);
System.out.println("very hot");
etatPorte1.setText(" "+afficheporte1);
System.out.println("alerte 1");
etatPorte2.setText(" "+afficheporte2);
System.out.println("alerte 2");
valNum.setText(" "+ affichenum);
System.out.println("num");
valetatIncendie.setText(" "+afficheincendie);
System.out.println("au feu");
valetatarrosage.setText(" "+affichearrosage);
System.out.println("glou glou");
valTauxHum.setText(" "+affichetauxHum);
System.out.println("que d'eau");

}

/*public void actionPerformed(ActionEvent e){
Object place=e.getSource();
System.out.println(" "+place);
}
*/

/* gestion du réseau udp */
public static final int TAILLE_MAX_DONNEES = 512;
int port= 1234;
DatagramSocket sock;
InetAddress inetServ;

public Ihm(String serveur){

try{
sock= new DatagramSocket();
inetServ= InetAddress.getByName(serveur);
}
catch(IOException ioe)
{
System.err.println("Erreur a l'obtention du socket!");
}
}
public void tourne(){
byte[] tamponRec= new byte[TAILLE_MAX_DONNEES];

while (true) {
try{
System.err.println("Ok");
//double temp = evol(valTemp);
double essai=2;
String emettre = ("5"+essai);

// Thread.sleep(2000); permet de stopper l'application pdt 2s
System.out.println("tourne"+emettre);
// on fabrique des flots pour ecrire les donnees
ByteArrayOutputStream baos= new ByteArrayOutputStream();
DataOutputStream dos= new DataOutputStream(baos);
dos.writeUTF(emettre); /*variable émise avec l'id = 5*/

DatagramPacket packetEnv= new DatagramPacket(baos.toByteArray(), baos.size(),
inetServ, port);
//on envoie
sock.send(packetEnv);
System.out.println("tourne");
/*On prepare la reception de la reponse
DatagramPacket packetRec= new DatagramPacket(tamponRec, tamponRec.length);

//on recoit
sock.receive(packetRec);

//on l'imprime
DataInputStream dis= new DataInputStream(new ByteArrayInputStream(packetRec.getData()));
String reponse= dis.readUTF();
System.out.println(reponse);*/

/* permet de stopper l'application pdt 2s */
try{

Thread.sleep(2000); // milliseconds!
}
catch(InterruptedException ie)
{ //ici si il y a eu une interruption externe
}

}

catch(IOException ioe){}
{ //ici si il y a eu une interruption externe
}
}
}

public static void main (String[] args) {
Ihm tp = new Ihm();
tp.tourne();
}
}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
dmaillet Messages postés 500 Date d'inscription mercredi 20 août 2003 Statut Membre Dernière intervention 11 juillet 2007
28 juil. 2005 à 12:05
euh, la ligne 312, c'est laquelle???
0
fredericg Messages postés 6 Date d'inscription dimanche 5 juin 2005 Statut Membre Dernière intervention 28 juillet 2005
28 juil. 2005 à 13:45
c'est :
sock.send(packetEnv);

vers la fin....
0
dmaillet Messages postés 500 Date d'inscription mercredi 20 août 2003 Statut Membre Dernière intervention 11 juillet 2007
28 juil. 2005 à 13:51
normal, ton socket est null tu passe par le constructeur Ihm qui a la
difference de ton constructeur Ihm(Server) n'instantie pas l'objet
socket...
0
fredericg Messages postés 6 Date d'inscription dimanche 5 juin 2005 Statut Membre Dernière intervention 28 juillet 2005
28 juil. 2005 à 15:33
Ok..mais je dois y faire quoi ?
Faut que je modifie mon "main" ou c'est ma classe Ihm qui va pas..?
Tant mieux que ca à l'air de te parler....
0
dmaillet Messages postés 500 Date d'inscription mercredi 20 août 2003 Statut Membre Dernière intervention 11 juillet 2007
28 juil. 2005 à 15:39
C'est pas toi qui l'a fait cette classe?

si tu n'utilise pas de socket pour ton server, vire ce qui est dans tourne relatif au server.
0
dmaillet Messages postés 500 Date d'inscription mercredi 20 août 2003 Statut Membre Dernière intervention 11 juillet 2007
28 juil. 2005 à 15:39
si tu vuex utliser un server, envoie le nom de ton server au constructeur...
0
fredericg Messages postés 6 Date d'inscription dimanche 5 juin 2005 Statut Membre Dernière intervention 28 juillet 2005
28 juil. 2005 à 15:49
J'ai transformé mon "main" comme ca ...Ca à l'air de marcher !!!

Merci pour ton aide précieuse !!!!

public static void main (String[] args) {
ÏϧÏϨ¹íÏIhm tp = new Ihm();
ÏϧÏϧ String serveur="";
ÏϧÏϧ Ihm tp1= new Ihm(serveur);
ÏϧÏϨ¹¹Ïtp1.tourne();
0
dmaillet Messages postés 500 Date d'inscription mercredi 20 août 2003 Statut Membre Dernière intervention 11 juillet 2007
28 juil. 2005 à 16:02
Tu ne construit pas 2 objets Ihm?

bug de copier-coller certainement...
Bien sur que ca tourne si le nom de ton server est vide,

car du coup le socket est vide,

pas de connexion, mais non null.
0