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)