2017-10-09 11 views
1

Je suis en train de programmer un jeu de pendu pour l'école.HangMan JTexfield ActionListener java.lang.NullPointerException

je reçois cette erreur: Exception dans le thread "AWT-EventQueue-0" java.lang.NullPointerException

Ceci est mon HangManBackend de classe:

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.util.Scanner; 
import java.util.concurrent.TimeUnit; 

/** 
* Created by Jhidzzo-Admin on 07.10.2017. 
* Project: Hangman 
*/ 

class HangManBackend 
{ 
    static String words[] = new String[10]; 
    static String inputSTR; 
    static boolean userInput; 
    static char input; 
    static char inputChar; 
    static Scanner reader = new Scanner(System.in); 
    static boolean sucess = false; 
    static boolean fail = false; 
    static int found = 0; 
    static int guessedChars = 0; 
    static int fails = 0; 
    static int rngI; 
    static char unkownChars[]; 
    static char knownChars[]; 

    static void backend(int rngI) 
    { 

     words[0] = "Banane"; 
     words[1] = "Apfel"; 
     words[2] = "Birne"; 
     words[3] = "Blau"; 
     words[4] = "Grün"; 
     words[5] = "Gelb"; 
     words[6] = "Rot"; 
     words[7] = "Weiß"; 
     words[8] = "Orange"; 
     words[9] = "Grau"; 

     int length = words[rngI].length(); 
     char unkownChars[] = words[rngI].toCharArray(); 
     char knownChars[] = new char[length]; 

     for (int j = 0; j < knownChars.length; j++) 
     { 
      knownChars[j] = '-'; 
     } 

     System.out.println(unkownChars); 

     System.out.println("Guess a letter!"); 
    }//End method 

    static void checkUserInput() 
    { 
     while (!sucess && !fail) 
     { 
      if (fails < 3) 
      { 
       //char input = reader.next(".").charAt(0); 
       System.out.println(inputChar + " Input given!"); 
       input = inputChar;       // Here happens the error 
       for (int i = 0; i < unkownChars.length; i++) 
       { 
        if (input == unkownChars[i] || input == Character.toLowerCase(unkownChars[i])) 
        { 
         knownChars[i] = unkownChars[i]; 
         found++; 
        } 
       } 
       if (found == 0) 
       { 
        fails++; 
        System.out.println("Nope letter is not in there!"); 
        if (fails < 3) 
        { 
         System.out.println("Enter your next guess!"); 
        } 
       } else 
       { 
        guessedChars = guessedChars + found; 
        if (found == 1) 
        { 
         System.out.println("Cool you found " + found + " letter!"); 
        } else if (found > 1) 
        { 
         System.out.println("Cool you found " + found + " letters!"); 
        } 
        found = 0; 
        if (guessedChars != knownChars.length) 
        { 
         System.out.println(knownChars); 
         System.out.println("Enter next guess!"); 
        } 
       } 
       if (guessedChars == knownChars.length) 
       { 
        sucess = true; 
        System.out.println("Good job you got the whole word: " + words[rngI]); 
       } 
      } else if (fails >= 3) 
      { 
       System.out.println("You failed!"); 
       fail = true; 
      } 
      userInput = false; 
     }//End while 
    } 

    static int getWordsLength() 
    { 
     int WLength = words.length; 

     return WLength; 

    } 

    static void setInput(String inputA) 
    { 
     inputSTR = inputA; 
     inputChar = inputSTR.charAt(0); 
     checkUserInput(); 
    } 

    static void listener() 
    { 
     Main.submit.addActionListener(new ActionListener() 
     { 
      @Override 
      public void actionPerformed(ActionEvent e) 
      { 
       setInput(Main.input.getText()); 
       Main.input.setText(null); 
      } 
     }); 
    } 

} 

Je pense que l'erreur se produit lorsque Je l'ai marqué. Je n'ai aucune idée pour la réparer ... J'ai essayé d'utiliser synchroniser mais je ne comprends pas vraiment.

Merci pour vos réponses!

Btw Je viens d'Allemagne, alors ne vous occupez pas de mon mauvais anglais. : D

EDIT: Ceci est ma classe principale

import jdk.internal.util.xml.impl.Input; 

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

/** 
* Created by Jhidzzo-Admin on 07.10.2017. 
* Project: Hangman 
*/ 

public class Main 
{ 
    static JTextField input = new JTextField(10); 
    static JButton submit = new JButton("Try your Luck"); 
    public static void main(String[] args) 
    { 



     JFrame frame = new JFrame("HangMan"); 

     frame.add(input); 
     frame.add(submit); 

     /* 
     --------------- 
      Layout 
     --------------- 
     */ 

     frame.setLayout(new GridBagLayout()); 
     GridBagConstraints gbc = new GridBagConstraints(); 
     gbc.gridwidth = GridBagConstraints.REMAINDER; 
     gbc.fill = GridBagConstraints.HORIZONTAL; 

     /* 
     --------------- 
      General 
     --------------- 
     */ 

     frame.setSize(500, 300); 
     frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
     frame.setVisible(true); 

     int rng1 = randomWithRange(0, HangManBackend.getWordsLength() - 1); 

     HangManBackend.listener(); 
     HangManBackend.backend(rng1); 
    } 
    static int randomWithRange(int min, int max) 
    { 
     int range = (max - min) + 1; 
     return (int) (Math.random() * range) + min; 
    } 
} 

EDIT: J'ajouté

  System.out.println(inputSTR + " Input given!"); 
      if (inputSTR != null) 
      { 
       input = inputSTR.charAt(0); 
      }else 
      { 
       listener(); 
      } 

et pas encore des œuvres ...

+1

[Qu'est-ce qu'une NullPointerException, et comment la réparer?] (Https://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix-it/) – Grimthorr

+0

"L'exception que vous avez posée à propos de se produit lorsque vous déclarez une variable, mais n'a pas créé un objet." Est-ce le cas pour moi? sry Je ne comprends toujours pas ... – Jhidzzo

+0

Je ne vois pas où 'Main.submit' est déclaré. Pourriez-vous poster toute votre source s'il vous plaît? – markspace

Répondre

1

essayer d'ajouter cette ligne dans le début de votre fonction backend

static void backend(int rngI) 
{ 
    if(rngI > 9 || rngI<0) 
    {System.out.println("number not supported "); 
    } 
+0

Ne fonctionne pas. Ajouté ma classe Main il y a rngI créé. – Jhidzzo