Exception in thread "main" java.lang.NullPointerException

Signaler
Messages postés
6
Date d'inscription
dimanche 5 juin 2005
Statut
Membre
Dernière intervention
28 juillet 2005
-
Messages postés
500
Date d'inscription
mercredi 20 août 2003
Statut
Membre
Dernière intervention
11 juillet 2007
-
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

Messages postés
500
Date d'inscription
mercredi 20 août 2003
Statut
Membre
Dernière intervention
11 juillet 2007

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.
Messages postés
6
Date d'inscription
dimanche 5 juin 2005
Statut
Membre
Dernière intervention
28 juillet 2005

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....
Messages postés
500
Date d'inscription
mercredi 20 août 2003
Statut
Membre
Dernière intervention
11 juillet 2007

Fait voir ta classe
Messages postés
6
Date d'inscription
dimanche 5 juin 2005
Statut
Membre
Dernière intervention
28 juillet 2005

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();
}
}
Messages postés
500
Date d'inscription
mercredi 20 août 2003
Statut
Membre
Dernière intervention
11 juillet 2007

euh, la ligne 312, c'est laquelle???
Messages postés
6
Date d'inscription
dimanche 5 juin 2005
Statut
Membre
Dernière intervention
28 juillet 2005

c'est :
sock.send(packetEnv);

vers la fin....
Messages postés
500
Date d'inscription
mercredi 20 août 2003
Statut
Membre
Dernière intervention
11 juillet 2007

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...
Messages postés
6
Date d'inscription
dimanche 5 juin 2005
Statut
Membre
Dernière intervention
28 juillet 2005

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....
Messages postés
500
Date d'inscription
mercredi 20 août 2003
Statut
Membre
Dernière intervention
11 juillet 2007

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.
Messages postés
500
Date d'inscription
mercredi 20 août 2003
Statut
Membre
Dernière intervention
11 juillet 2007

si tu vuex utliser un server, envoie le nom de ton server au constructeur...
Messages postés
6
Date d'inscription
dimanche 5 juin 2005
Statut
Membre
Dernière intervention
28 juillet 2005

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();
Messages postés
500
Date d'inscription
mercredi 20 août 2003
Statut
Membre
Dernière intervention
11 juillet 2007

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.