Partage
  • Partager sur Facebook
  • Partager sur Twitter

NullPointerException

Sujet résolu
    25 avril 2021 à 2:44:07

    Bonjour à tous,

    Je suis le cours "Écrivez du code Java maintenable" et j'ai un problème. Au moment de l'éxécution du code j'ai un NullPointerException et j'ai beau me creuser la tête ' je n'arrive pas à savoir d'où ça peut bien venir, j'ai compris quelle variable était incriminé mais je n'arrive pas à trouver la cause.

    Voilà le message d'erreur :

    Exception in thread "main" java.lang.NullPointerException: Cannot invoke "controller.GameController.addPlayer(String)" because "this.controller" is null

    at view.View.promptForPlayerName(View.java:21)

    at controller.GameController.run(GameController.java:35)

    at games.CardGame.main(CardGame.java:11)

    Et voilà les morceaux de code incriminés :

    public class View {
        GameController controller;
        Scanner keyboard = new Scanner(System.in);
    
        public void setController(GameController gc) {
            this.controller = controller;
        }
        public void promptForPlayerName() {
            System.out.println("Enter player name : ");
            String name = keyboard.nextLine();
            if (name.isEmpty()) {
                controller.startGame();
            }
            else {
                controller.addPlayer(name);
            }
        }
     public void run() {
            while (true) {
                switch (gameState) {
                    case AddingPlayers:
                        view.promptForPlayerName();
                        break;
                    case CardsDealt:
                        view.promptForFlip();
                        break;
                    case WinnerRevealed:
                        view.promptForNewGame();
                        break;
                }
            }
        }
     public void run() {
            while (true) {
                switch (gameState) {
                    case AddingPlayers:
                        view.promptForPlayerName();
                        break;
                    case CardsDealt:
                        view.promptForFlip();
                        break;
                    case WinnerRevealed:
                        view.promptForNewGame();
                        break;
                }
            }
        }


    Merci d'avance pour vos réponses.


    • Partager sur Facebook
    • Partager sur Twitter
      25 avril 2021 à 3:50:10

      Je crois que l'erreur vient de ta fonction setController(). En effet, si j'ai bien compris la fonction, tu veux affecter le gameController pris en paramètre au controller de ta classe View. Mais tu affectes plus ce controller à lui-meme (dans la fonction setController() il n'y a pas de variable controller donc écrire "controller" et "this.controller" revient au même). Je te laisse corriger.
      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        30 avril 2021 à 20:49:23

        Salut jbabin49,

        En regardant ton code je crois que j'ai remarqué 2 choses :

        - setController n'est jamais appeler donc jamais attribué.

        - et  GameController n'est jamais initialisé chaque déclaraction d'objet doit etre suivit de pres ou de loin par un new, et la j'en vois pas.

        essaye comme ca deja :

        public class View {
            GameController controller = new GameController();
            Scanner keyboard = new Scanner(System.in);
         
            public void setController(GameController gc) {
                this.controller = controller;
            }
            public void promptForPlayerName() {
                System.out.println("Enter player name : ");
                String name = keyboard.nextLine();
                if (name.isEmpty()) {
                    controller.startGame();
                }
                else {
                    controller.addPlayer(name);
                }
            }



        • Partager sur Facebook
        • Partager sur Twitter
          1 mai 2021 à 6:39:25

          Tu ne donnes pas le code qui met en place le contrôleur et la vue. C'est la que tu oublies, soit d'allouer le contrôleur, soit d'indiquer à la vue qu'elle doit s'en servir.
          • Partager sur Facebook
          • Partager sur Twitter
            2 mai 2021 à 18:15:49

            Merci à tous j'ai trouvé la solution, je n'avais pas initialisé GameController et dans une autre partie du code je m'était trompé sur le nom d'une variable. Ca fonctionne maintenant parfaitement.
            • Partager sur Facebook
            • Partager sur Twitter

            NullPointerException

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown