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 ...
[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
"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
Je ne vois pas où 'Main.submit' est déclaré. Pourriez-vous poster toute votre source s'il vous plaît? – markspace