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

Java Discussion :

Réseau : java.lang.NullPointerException


Sujet :

Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2007
    Messages : 165
    Par défaut Réseau : java.lang.NullPointerException
    Bonjour,

    J'envoie ma classe Network (code ci-dessous) à ma classe viewTable depuis la classe client (où network est utilisée et marche très bien).
    Ensuite ma classe viewTable va utilisé la classe Network mais il semblerait qu'elle ne soit pas instanciée.
    Auriez-vous une idée ?

    Erreur :
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at unoclient.Network.<init>(Network.java:30)
    at unoclient.viewTable.<init>(viewTable.java:57)
    at unoclient.viewTable$3.run(viewTable.java:184)
    at java.awt.event.InvocationEvent.dispatch(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)
    Classe network :
    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
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
     
    package unoclient;
     
    import java.net.SocketException;
    import java.util.logging.Level;
    import java.util.logging.Logger;
    import java.io.IOException;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    import java.net.Socket;
     
    /**
     *
     * @author dafflone
     */
    public class Network {
        private Socket skt;
        private ObjectOutputStream out;
        private ObjectInputStream in;
     
        public Network(Socket skt2) throws IOException{
         skt = skt2;
        }
     
        public Network(Network net){
            skt = net.getSocket(); <-------------- Erreur
            out = net.getOut();
            in = net.getIn();
        }
     
         public void writeObject(Object object) throws java.io.IOException{
             System.out.println(" socket :"+skt.getInetAddress().getHostAddress());
            if(out == null){
                out = new ObjectOutputStream(skt.getOutputStream());
            }
            out.writeObject(object);
     
            System.out.print("Packet sent : "+object.getClass()+" - to "+ skt.getInetAddress() +"\n");
     
            out.flush();
     
     
         }
     
         public Object readObject() throws java.io.IOException, ClassNotFoundException{
             if(in == null){
                in = new ObjectInputStream(skt.getInputStream());
             }
             Object object = in.readObject();
     
             System.out.print("Packet receive : "+object+" - from "+ skt.getInetAddress() +"\n");
     
             return object;
     
         }
     
         /* Close the streams and the connection */
           public void closeConnection(){
            try {
                this.in.close();
                this.out.close();
                this.skt.close();
            } catch (IOException ex) {
                Logger.getLogger(Network.class.getName()).log(Level.SEVERE, null, ex);
            }
         }
     
           private Socket getSocket(){
               return skt;
           }
     
           private ObjectOutputStream getOut(){
               return out;
           }
     
           private ObjectInputStream getIn(){
               return in;
           }
     
     
    }
    Méthode ou se trouve l'erreur(la ligne ou la méthode writeObject de network est utilisé) :
    Cordialement,

    rXp>!<

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    merci de donner le stacktrace complet ainsi que de mentionné à quoi correspondent les lignes du stack dans ton code...

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2007
    Messages : 165
    Par défaut
    J'ai fait des changements dans mon code car je pensais que c'était lié au Socket de la classe network.
    Donc j'ai mis à jour le code Network et la ligne incriminé est bien la ligne de network avec le socket.
    Bref le premier post est mis à jour. (ou le sera dans 5 minutes)

    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at unoclient.Network.<init>(Network.java:30)
    at unoclient.viewTable.<init>(viewTable.java:57)
    at unoclient.viewTable$3.run(viewTable.java:184)
    at java.awt.event.InvocationEvent.dispatch(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)
    EDIT : J'ai édité.

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    at unoclient.viewTable.<init>(viewTable.java:57)

    a cette linge là, tu appelle le constructeur Network en lui passant un null en argument, ce qu'il n'apprécie pas.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2007
    Messages : 165
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    at unoclient.viewTable.<init>(viewTable.java:57)

    a cette linge là, tu appelle le constructeur Network en lui passant un null en argument, ce qu'il n'apprécie pas.
    Non, j'envoie network

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public viewTable(Game[]rooms2, Player player2, Network net2) {
            initComponents();
            rooms = rooms2;
            player = player2;
            network = new Network(net2);
    }

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    non, tu envoie net2 qui est null.

    A toi de remonter la chaine d'appel pour trouver à quel endroit on passe le null.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2007
    Messages : 165
    Par défaut
    Oui tu as raison, excuse-moi.
    Alors il est null et il devient null au moment du "transfert" d'une classe à l'autre si j'ose dire.

    C'est bizarre.

    J'ai une classe : client et dans cette classe 2 classe inherite sont présente (car 2 Threads).

    La classe ClientGUI fait partit des 2.
    Quand je passe network dans le premier Thread tout va bien, mais quand je le passe dans le 2ième (celui-ci) il devient null (alors que le premier argument est correct).
    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
    class ClientGUI implements Runnable{
     
            private Game[] rooms;
            private Network network;
          public ClientGUI(Game[] rooms2, Network network2){
            rooms = rooms2;
            this.network = network2;
          }
     
        public void run(){
            System.out.println("Starting GUI");
            viewTable.main(new String[0],rooms, player, this.network);
            System.out.println(this.network.getSocket().getInetAddress());
        }
     
    }

  8. #8
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    cette classe n'est pas impliquée dans ton stacktrace. Le "thread" lancé est "unoclient.viewTable$3" (une classe anonyme dans viewTable), pas ClientGUI. Suffit de remonter à la main à chaque étape pour savoir à partir de quel moment c'est null.

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2007
    Messages : 165
    Par défaut
    Merci pour ton aide j'ai trouvé l'erreur (qui est mon ignorance).

    J'essayais de faire cela :
    - Classe A contient Thread 1 et 2
    - Classe A start Thread 1
    - Thread 1 Initialise Classe b
    - Classe B start Thread 2
    - Thread 2 à accès aux variables de la classe A



    Mais je ne savais pas pas que avec super il réinstanciait la classe mère et donc toutes les variable seront null (comme network) ce qui pausait problème ensuite.
    Comment puis-je contourner cela ?

  10. #10
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par rXpCH Voir le message
    Mais je ne savais pas pas que avec super il réinstanciait la classe mère et donc toutes les variable seront null (comme network) ce qui pausait problème ensuite.
    Comment puis-je contourner cela ?
    code?

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2007
    Messages : 165
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    code?
    Pas besoin. J'ai oublié à un endroit de passer la classe mère en paramètre(this) pour ensuite pouvoir l'utiliser correctement. J'aurais du faire cela dès le début au lieu d'un super.

    Merci de ton aide

    Cordialement,

    rXp>!<

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

Discussions similaires

  1. java.lang.NullPointerException
    Par kamaldev dans le forum Struts 1
    Réponses: 12
    Dernier message: 28/06/2006, 19h45
  2. Probleme erreur java.lang.NullPointerException
    Par Tsukaasa dans le forum Langage
    Réponses: 4
    Dernier message: 25/05/2006, 18h19
  3. Réponses: 8
    Dernier message: 11/05/2006, 19h32
  4. [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
  5. java.lang.NullPointerException getparent()
    Par guano dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 17/03/2006, 17h38

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