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

avec Java Discussion :

MVC : java.lang.NullPointerException


Sujet :

avec Java

  1. #1
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    juin 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : juin 2009
    Messages : 5
    Points : 6
    Points
    6
    Par défaut MVC : java.lang.NullPointerException
    Bonjour,

    Je commence la programmation Java et j’essaie de faire une structure de MVC. Pour cela, je me suis inspiré de la vidéo :

    J’ai une erreur de pointeur nul et je ne vois pas comment la résoudre.

    J’ai deux packages avec chacune une classe. Le package contrôleur avec la classe Main, et le package vue avec la classe FrmMain.

    Dans ma classe Main, j’ai un attribut de type FrmMain que j’instancie avec mon contrôleur comme argument. Dans ma classe FrmMain, j’appelle la méthode demandeFrmMain de mon contrôleur. Et dans mon contrôleur, j’essaie d’envoyer des données à la vue en utilisant la méthode afficheValeur de celle-ci. Et là, j’ai un java.lang.NullPointerException.

    Voilà, à quoi ressemble le code des deux classes

    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
    package controleur;
     
    import vue.FrmMain;
     
    public class Main {
     
        private FrmMain frmMain;
     
        public static void main(String[] args) {
            new Main();
        }
     
        public void demandeFrmMain() {
            System.out.println("trace 1");
            frmMain.afficheValeur("coucou");
        }
     
        public Main() {
            frmMain = new FrmMain(this);
        }
     
    }
    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
    package vue;
     
    import controleur.Main;
     
    public class FrmMain {
     
        private Main controle;
     
        public FrmMain(Main controle) {
            this.controle = controle;
            demandeValeur();
        }
     
        private void demandeValeur() {
            controle.demandeFrmMain();
        }
     
        public void afficheValeur(String valeur) {
            System.out.println("trace 2");
            System.out.println(valeur);
        }
     
    }
    Et ma console ressemble à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    trace 1
    Exception in thread "main" java.lang.NullPointerException
        at controleur.Main.demandeFrmMain(Main.java:15)
        at vue.FrmMain.demandeValeur(FrmMain.java:15)
        at vue.FrmMain.<init>(FrmMain.java:11)
        at controleur.Main.<init>(Main.java:19)
        at controleur.Main.main(Main.java:10)

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    septembre 2004
    Messages
    12 190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : septembre 2004
    Messages : 12 190
    Points : 20 643
    Points
    20 643
    Par défaut
    Hello,

    en résumé le problème est que tu te sers de tes objets, avant que leur constructeur ne soit terminé. Cela pose des problèmes.

    Dans le constructeur de Main, tu as cette ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    frmMain = new FrmMain(this);
    Dedans tu appelles une autre classe, et tu y passes this, c'est à dire l'objet en cours, alors que son constructeur n'est pas encore terminé. Mauvaise idée.
    Puisque tu lui as passé l'objet pointé par this, l'autre classe va l'utiliser normalement, sans se poser la question de si cet objet est prêt à utiliser ou pas. On le lui donne, donc en ce qui la concerne, bien sûr qu'il est prêt à être utilisé. Mais, en réalité, son constructeur n'est pas fini, donc non il ne l'est pas, et voilà, ça plante.

    Tu devrais d'abord construire les objets Main et FrmMain, puis une fois qu'ils ont fini, les relier l'un à l'autre. Ensuite, et seulement ensuite, demander à l'un deux de faire un travail.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    juin 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : juin 2009
    Messages : 5
    Points : 6
    Points
    6
    Par défaut Résolu
    Merci pour la réponse. J’ai mis mes méthodes qui sont appelées par l’autre classe en statique, cela à l’air de fonctionner pour l’instant

+ 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