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

Langage Java Discussion :

Problème pointeur nul


Sujet :

Langage Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2013
    Messages : 24
    Par défaut Problème pointeur nul
    Bonjour,

    Je suis en train de faire un programme mais j'ai une erreur et je ne sais pas d'où elle vient. J'ai fait plusieurs tests mais Eclipse me dit "java.lang.NullPointerException" pour le fichier Main. Je ne sais pas si l'erreur provient de mes constructeurs ou pas. La classe Main instancie la classe World et World contient un tableau qui est d' une autre classe.L'erreur vient du tableau tempWorld, à l'endroit où il est passé en argument à la méthode updateWorld. Voici mon fichier. Est-ce que quelqu'un de plus expérimenté pourrait m'aider ?

    D'avance merci.


    Main:

    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
    public class Main
    {
    	public static void main(String[] args)
    	{
     
    		World world = new World();
     
     
    		for(int i = 0; ; i++)
    		{
     
    			window.updateWorld(Cell.tempWorld);					
    			refresh();
    		}
            }
    }

  2. #2
    Membre chevronné Avatar de toutgrego
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2013
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2013
    Messages : 217
    Par défaut
    Salut,

    j'ai l'impression que ton tableau tempWorld n'est pas instancié

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2013
    Messages : 24
    Par défaut
    Citation Envoyé par toutgrego Voir le message
    Salut,

    j'ai l'impression que ton tableau tempWorld n'est pas instancié

    Je sais pas parce que c est ce que tente de me dire le programme mais normalement il devrait l etre vu que j'instancie World qui contient un tableau de Cell, tempWorld etant dans la classe Cell. As-tu une idée de ce que je devrais faire?

  4. #4
    Membre émérite Avatar de benratti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    471
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2004
    Messages : 471
    Par défaut
    Pour ce type de problème, la solution de passer par un debugger est, à mon avis, une très bonne chose.

    Un mode pas à pas te permettra rapidement d'identifier l'origine du problème.
    Les IDE dignes de ce nom propose tous une interface de debuggage assez simple d'utilisation, dont netbeans et eclipse (pour ce que j'utilise).

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2013
    Messages : 24
    Par défaut
    Citation Envoyé par benratti Voir le message
    Pour ce type de problème, la solution de passer par un debugger est, à mon avis, une très bonne chose.

    Un mode pas à pas te permettra rapidement d'identifier l'origine du problème.
    Les IDE dignes de ce nom propose tous une interface de debuggage assez simple d'utilisation, dont netbeans et eclipse (pour ce que j'utilise).
    J ai essaye beaucoup de chose mais pas de résultats. Et je ne sais pas me servir d'un debugger

  6. #6
    Membre Expert Avatar de Nico02
    Homme Profil pro
    Developpeur Java/JEE
    Inscrit en
    Février 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Developpeur Java/JEE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 728
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    window.updateWorld(Cell.tempWorld);
    Ça ne serait pas plutôt

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    world.updateWorld(Cell.tempWorld);

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2013
    Messages : 24
    Par défaut
    Citation Envoyé par Nico02 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    window.updateWorld(Cell.tempWorld);
    Ça ne serait pas plutôt

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    world.updateWorld(Cell.tempWorld);
    Non car updateWorld est une méthode pour mettre a jour le "monde" dans la fenetre d'affichage.

  8. #8
    Membre chevronné Avatar de toutgrego
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2013
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2013
    Messages : 217
    Par défaut
    Dans ta classe world tu accède au tableau qui est une variable de classe alors qu'il n'est pas instancié, d'où ton erreur de NullPointerException

  9. #9
    Membre chevronné Avatar de toutgrego
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2013
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2013
    Messages : 217
    Par défaut
    Citation Envoyé par gkn28 Voir le message
    Je sais pas parce que c est ce que tente de me dire le programme mais normalement il devrait l etre vu que j'instancie World qui contient un tableau de Cell, tempWorld etant dans la classe Cell. As-tu une idée de ce que je devrais faire?

    Dans ce cas Nico002 a raison, parce que tu n'utilise pas l'objet que tu instancies

    Citation Envoyé par Nico02 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    window.updateWorld(Cell.tempWorld);
    Ça ne serait pas plutôt

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    world.updateWorld(Cell.tempWorld);

  10. #10
    Membre Expert Avatar de Nico02
    Homme Profil pro
    Developpeur Java/JEE
    Inscrit en
    Février 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Developpeur Java/JEE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 728
    Par défaut
    Tu n'instancies jamais ton tableau.

    L'instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cell.tempWorld = new int [height][width];
    est contenue dans la méthode nextState() de ta classe Cell qui n'est appelée que après. A aucun moment tu ne l'instancie dans la classe World.

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2013
    Messages : 24
    Par défaut
    Citation Envoyé par toutgrego Voir le message
    Dans ta classe world tu accède au tableau qui est une variable de classe alors qu'il n'est pas instancié, d'où ton erreur de NullPointerException
    Mais lorsque j'instancie World, la classe Cell est également instanciée non ? puisque World contient un tableau de Cell (tableau worldTab)

  12. #12
    Membre Expert Avatar de Nico02
    Homme Profil pro
    Developpeur Java/JEE
    Inscrit en
    Février 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Developpeur Java/JEE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 728
    Par défaut
    Citation Envoyé par gkn28 Voir le message
    Mais lorsque j'instancie World, la classe Cell est également instanciée non ? puisque World contient un tableau de Cell (tableau worldTab)
    Non. Tu dois explicitement instancier toutes les cellules de ton tableau.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for(int i=0;i<X;i++)
        for(int j=0;j<X;j++)
            tab[i][j] = new Cell();

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2013
    Messages : 24
    Par défaut
    Citation Envoyé par Nico02 Voir le message
    Tu n'instancies jamais ton tableau.

    L'instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cell.tempWorld = new int [height][width];
    est contenue dans la méthode nextState() de ta classe Cell qui n'est appelée que après. A aucun moment tu ne l'instancie dans la classe World.
    Je l'appelle après car il me faut les dimensions que je n'ai pas au début. Mais le fait d'instancier une classe qui contient des éléments d'une autre classe n'instancie pas cette dernière ?

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2013
    Messages : 24
    Par défaut
    Citation Envoyé par Nico02 Voir le message
    Non. Tu dois explicitement instancier toutes les cellules de ton tableau.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for(int i=0;i<X;i++)
        for(int j=0;j<X;j++)
            tab[i][j] = new Cell();
    Ah d'accord ... je savais pas qu'il fallait procéder comme ca. Merci

  15. #15
    Membre Expert Avatar de Nico02
    Homme Profil pro
    Developpeur Java/JEE
    Inscrit en
    Février 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Developpeur Java/JEE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 728
    Par défaut
    L'instruction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Cell[][] tab = new Cell[x][y];
    va simplement créer en mémoire un objet capable de contenir [x][y] éléments Cell. Mais ces éléments ne sont pas encore instanciés.

    Je remarque aussi que tu n'a pas de constructeur dans ta classe Cell. Donc par défaut, le compilateur va en créer un avec des paramètre vide. Mais encore une fois cela n'instanciera pas ton tableau temporaire.

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2013
    Messages : 24
    Par défaut
    Citation Envoyé par Nico02 Voir le message
    L'instruction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Cell[][] tab = new Cell[x][y];
    va simplement créer en mémoire un objet capable de contenir [x][y] éléments Cell. Mais ces éléments ne sont pas encore instanciés.
    Je partais de la même logique que pour les objets simples en fait, vu que c'est instancié avec new. Merci encore

    De toute façon, lorsque je fais worldTab = new Cell[matrice.size()][matrice.get(0).size()]; ,j'utilise le constructeur par défaut.

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

Discussions similaires

  1. Pointeur nul sur une vidéo, problème de codec ?
    Par HellHammer dans le forum OpenCV
    Réponses: 0
    Dernier message: 13/03/2009, 11h58
  2. Problème Pointeurs d'objets
    Par Julien_C++ dans le forum C++/CLI
    Réponses: 6
    Dernier message: 03/08/2007, 17h00
  3. Problème pointeur de fonction
    Par ired dans le forum C++Builder
    Réponses: 7
    Dernier message: 16/06/2007, 14h24
  4. problème pointeur sur structure
    Par lejohn dans le forum C
    Réponses: 9
    Dernier message: 01/05/2007, 14h17
  5. [MFC] Problème pointeur sur une classe
    Par mick74 dans le forum MFC
    Réponses: 7
    Dernier message: 14/04/2004, 15h17

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