IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Concurrence et multi-thread Java Discussion :

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException ?


Sujet :

Concurrence et multi-thread Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 54
    Points : 47
    Points
    47
    Par défaut Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException ?
    Bonjour a tous je vous demande de l'aide car j'ai un probleme avec mon programme. Sela fait 3h que je me casse la tete dessus et je n'arrive pas a trouver la solution.
    Je suis tous neuf dans le java. Soyer gentil et ne vous moquer pas de moii si sela vient d'un probleme tous bete.
    Je vous explique le probleme en detail :
    J'ai 2 classes une qui gere la partis graphique de mon programme elle s'appelle graphique.
    et une deuxieme classe qui s'appelle traitementSocket cette classe va gerer tous se qui est connection envoie de message etc...


    Et mon souci ses que jai une exeption qui se leve a la fermeture de mon application.

    Voila le code source SIMPLIFIER :


    graphique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
    import java.awt.*;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
     
    import javax.swing.*;
     
     
    public class graphique {
     
    //creation de tous les composant nessesaire
     
    	JFrame cadre = new JFrame("Test") ;
    	JPanel panneauPrincipal = new JPanel() ;
    	GridLayout dispositionPanneauPrincipal =  new GridLayout(10,1) ;
    	JLabel textePort = new JLabel("Entrez le port d'envoie") ;
    	JTextField port = new JTextField("6666") ;
    	JLabel texteIp = new JLabel("Entrez l'adresse ip du contact") ;
    	JTextField ip = new JTextField("127.0.0.1") ;
    	JButton boutton = new JButton("Cliquer pour se connecter :") ;
    	JLabel texteHistorique = new JLabel("Historique de conversation :" ) ;
    	JTextArea texteRecu = new JTextArea() ;
    	JButton bouttonMessage = new JButton("Clique ici pour envoyer votre message") ;
    	JLabel texteEnvoie = new JLabel("Veuillez entrez ci-dessous le texte a envoyé a votre serveur.") ;
    	JTextArea texteAEnvoyer = new JTextArea() ;
     
    	//ajout des composant dans la fenetre 
    	graphique(){
    		panneauPrincipal.setLayout(dispositionPanneauPrincipal) ;
    		panneauPrincipal.add(textePort) ;
    		panneauPrincipal.add(port) ;
    		panneauPrincipal.add(texteIp) ;
    		panneauPrincipal.add(ip) ;
    		panneauPrincipal.add(boutton) ;
    		panneauPrincipal.add(texteHistorique) ;
    		panneauPrincipal.add(texteRecu) ;
    		panneauPrincipal.add(texteEnvoie) ;
    		panneauPrincipal.add(texteAEnvoyer) ;
    		panneauPrincipal.add(bouttonMessage) ;
    		texteAEnvoyer.setEnabled(false) ;
    		texteRecu.setEnabled(false) ;
    		traitementSocket sockets = new traitementSocket(this) ;
    		boutton.addActionListener(sockets) ;
    		cadre.setContentPane(panneauPrincipal) ;
    		cadre.setSize(400,600) ;
    		cadre.setVisible(true) ;
    		cadre.addWindowListener(new WindowAdapter() 
    		{ 
    			public void windowClosing(WindowEvent e) 
    			{ 
    				traitementSocket socket = new traitementSocket() ;
    				socket.fermeture() ;
    				System.exit(0) ;
    			}
    			}) ;
     
    	}
     
    	public static void main(String[] args) {
    		new graphique() ;
    	}
    }

    //Voila maintenat la classe traitementSocket

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.net.*;
     
     
    public class traitementSocket implements ActionListener {
    	graphique parent ;
    	Socket monSocket = null;
    	traitementSocket(graphique adresseMemoire){
    	parent = adresseMemoire ;
    }
    public traitementSocket() {
     
    }
     
    public void actionPerformed(ActionEvent e) {
     
    	parent.texteRecu.setText("Tentative de connection a localhost :") ;	
     
     
    	try{		
     
    		monSocket = new Socket(parent.ip.getText(), Integer.valueOf(parent.port.getText())) ;
    		parent.texteRecu.setText(parent.texteRecu.getText()+"\n Connection reussit !") ;
    		parent.boutton.setText("Cliquez ici pour se deconnecter :") ;
    		parent.texteAEnvoyer.setEnabled(true) ;
     
    	}catch (Exception erreur) {
    		parent.texteRecu.setText(parent.texteAEnvoyer.getText()+"\nErreur lors de la creation du socket...\n" + erreur.getMessage()) ;
    	}
     
     
    }
     
    et voila le soucie se situe ici je pense
     
    public void fermeture(){
    	try{
    		monSocket.close() ;
    	}catch (Exception e) {
    		parent.texteRecu.setText(parent.texteRecu.getText() + 
    		"\n erreur lors de la fermeture du socket") ;
    		parent.ip.setText("lol") ;
    	}
    }
     
    }

    Voila maintenant les messages console pour seux qui arrivent a les comprendre

    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at traitementSocket.fermeture(traitementSocket.java:40)
    at graphique$1.windowClosing(graphique.java:53)
    at java.awt.AWTEventMulticaster.windowClosing(Unknown Source)
    at java.awt.Window.processWindowEvent(Unknown Source)
    at javax.swing.JFrame.processWindowEvent(Unknown Source)
    at java.awt.Window.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)
    Merci d'avance pour vos précieuse reponse toutes reponse est bonne a prendre.


    Ps : Je rappelle que je suis le noob des noob en java donc ses normal que je fasse des erreur betes TOUS LE MONDE EST PASSER PAR LA

  2. #2
    Membre du Club Avatar de haco28
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 64
    Points : 42
    Points
    42
    Par défaut
    tkt on n'est pas la poue se moquer

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 13
    Points : 12
    Points
    12
    Par défaut
    je crois que ce n'est pas très compliqué, lorsque tu fermes la fenetre tu ecrase l'ancien objet socket par un tout nouveau :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public void windowClosing(WindowEvent e) 
    			{ 
    				traitementSocket socket = new traitementSocket() ;//ICI
    				socket.fermeture() ;
    				System.exit(0) ;
    			}
    or le constructeur appelé ne fait absolument rien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public traitementSocket() {}
    surtout pas initialiser l'objet monSocket qui a la creation de la classe est null :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Socket monSocket = null;
    , le seul endroit ou tu l'initialises est dans la methode actionPerformed, qui n'a pas le temps d'etre appelée par un clic de bouton.
    a l'appel de la methode fermeture() ton objet monSocket est donc toujours null.

    plusieurs solutions :

    * fais un test dans fermeture pour savoir si monSocket est null, dans ce cas pas besoin de le fermer puisqu'il n'existe pas

    * fais un test dans windowClosing(WindowEvent e) pour savoir si socket est null, dans ce cas pas besoin de le fermer parcequ'il n'existe pas, si il existe ne le remplace pas par un nouveau socket! comme tu l'as ecrit on perd la reference vers l'ancien objet socket, il est alors eliminé par le garbage collector car personne ne pointe vers lui, sans que la methode fermeture soit appelée!

    tu dois en fait combiner les 2 solutions (2 tests de null et pas de creation de nouveau socket) car meme si ton socket existe tu n'a pas de garantie que quelqu'un ait appuyé sur le bouton pour initialiser monSocket.


    mon conseil :

    - appel la methode fermeture() dans la methode finalize() de la classe traitementSocket : tu auras la garantie que le socket sera fermé lorsque l'objet traitementSocket sera detruit. test bien sur si monSocket est null.

    et ne crée pas de nouveau socket dans windowClosing(WindowEvent e) , test si il est null, ne fait rien dans ce cas.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 54
    Points : 47
    Points
    47
    Par défaut Parfait
    Merci beaucoup pour ta reponce je vois un peu mieu comment fonctionne un programme en java.
    Je vai de suite tester ta solution.



    thanksssssssssss

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 54
    Points : 47
    Points
    47
    Par défaut Derniere question
    Derniere question et la vou pensez que ses mieu ou reste til des chose a regler
    Classe graphique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
     
    import java.awt.*;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    import javax.swing.*;
     
     
    public class graphique {
    	int i ;
    	JFrame cadre = new JFrame("Test") ;
    	JPanel panneauPrincipal = new JPanel() ;
    	GridLayout dispositionPanneauPrincipal =  new GridLayout(10,1) ;
    	JLabel textePort = new JLabel("Entrez le port d'envoie") ;
    	JTextField port = new JTextField("6666") ;
    	JLabel texteIp = new JLabel("Entrez l'adresse ip du contact") ;
    	JTextField ip = new JTextField("127.0.0.1") ;
    	JButton boutton = new JButton("Cliquer pour se connecter :") ;
    	JLabel texteHistorique = new JLabel("Historique de conversation :" ) ;
    	JTextArea texteRecu = new JTextArea() ;
    	JButton bouttonMessage = new JButton("Clique ici pour envoyer votre message") ;
    	JLabel texteEnvoie = new JLabel("Veuillez entrez ci-dessous le texte a envoyé a votre serveur.") ;
    	JTextArea texteAEnvoyer = new JTextArea() ;
    	traitementSocket sockets = new traitementSocket(this) ;		
     
    	graphique(){
    		panneauPrincipal.setLayout(dispositionPanneauPrincipal) ;
    		panneauPrincipal.add(textePort) ;
    		panneauPrincipal.add(port) ;
    		panneauPrincipal.add(texteIp) ;
    		panneauPrincipal.add(ip) ;
    		panneauPrincipal.add(boutton) ;
    		panneauPrincipal.add(texteHistorique) ;
    		panneauPrincipal.add(texteRecu) ;
    		panneauPrincipal.add(texteEnvoie) ;
    		panneauPrincipal.add(texteAEnvoyer) ;
    		panneauPrincipal.add(bouttonMessage) ;
    		texteAEnvoyer.setEnabled(false) ;
    		texteRecu.setEnabled(false) ;
    		boutton.addActionListener(sockets) ;
    		cadre.setContentPane(panneauPrincipal) ;
    		cadre.setSize(400,600) ;
    		cadre.setVisible(true) ;
    		cadre.addWindowListener(new WindowAdapter() 
    		{ 
    			public void windowClosing(WindowEvent e) 
    			{ 
    				try{
    				if(sockets.monSocket != null)
    				sockets.monSocket.close() ;
    				}catch (Exception erreur) {
    					texteRecu.setText("Erreur lors de la fermeture du socket.") ;
    				}finally{
    				System.exit(0) ;
    			}
    			}
    			}) ;
     
    	}
     
    	public static void main(String[] args) {
    		new graphique() ;
    	}
    }
    classe traitementSocket :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.net.*;
     
     
    public class traitementSocket implements ActionListener {
    	graphique parent ;
    	int i ;
    	Socket monSocket ;
    	traitementSocket(graphique adresseMemoire){
    	parent = adresseMemoire ;
    }
    public void actionPerformed(ActionEvent evenement) {	
    	try{	
    		parent.texteRecu.setText("Tentative de connection a localhost :") ;	
    		monSocket = null ;
    		monSocket = new Socket(parent.ip.getText(), Integer.valueOf(parent.port.getText())) ;
    		parent.texteRecu.setText(parent.texteRecu.getText()+"\n Connection reussit !") ;
    		parent.boutton.setText("Cliquez ici pour se deconnecter :") ;
    		parent.texteAEnvoyer.setEnabled(true) ;
     
    	}catch (Exception erreur) {
    		parent.texteRecu.setText(parent.texteAEnvoyer.getText()+"\nErreur lors de la creation du socket...\n" + erreur.getMessage()) ;
    	}
     
    }
     
    }
    Point super positif j'ai plus d'erreur

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 13
    Points : 12
    Points
    12
    Par défaut
    ca ma l'air pas mal du tout.

    est inutile puisque tu affectes la variable juste derriere , mais c'est un petit oubli.

    n'hesite pas a poser d'autres questions, on est pas vraiment la pour se moquer de toi...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 08/02/2010, 08h23
  2. Réponses: 5
    Dernier message: 24/02/2008, 22h58
  3. Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    Par Trint dans le forum Interfaces Graphiques en Java
    Réponses: 6
    Dernier message: 27/02/2007, 11h28
  4. Réponses: 8
    Dernier message: 11/05/2006, 19h32
  5. [JDIC]Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    Par kedare dans le forum Concurrence et multi-thread
    Réponses: 4
    Dernier message: 06/05/2006, 22h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo