1
我目前正在爲學校編寫Hang子手遊戲。HangMan JTexfield ActionListener java.lang.NullPointerException
我得到這個錯誤:異常在線程 「AWT-EventQueue的-0」 顯示java.lang.NullPointerException
這是我的課HangManBackend:
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);
}
});
}
}
我認爲錯誤發生在那裏我標記了它。我沒有任何想法修復它...我嘗試使用同步,但我沒有真正實現它。
謝謝你的回答!
btw我來自德國,所以不介意我的壞英語。 :d
編輯:這是我的課主要
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;
}
}
編輯:所以我添加
System.out.println(inputSTR + " Input given!");
if (inputSTR != null)
{
input = inputSTR.charAt(0);
}else
{
listener();
}
,它仍然沒有工作...
[什麼是NullPointerException,以及如何解決它?](https://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix-it/) – Grimthorr
「當你聲明一個變量但沒有創建一個對象時,你詢問的異常就會發生。」這是我的情況嗎? sry我仍然沒有得到它... – Jhidzzo
我看不到'Main.submit'聲明在哪裏。你可以發佈你的所有來源嗎? – markspace