我目前正在将 Hangman GUI 作为硬件分配工作,并且我已经完成了所有代码(我认为)但是,我得到了一个 nullpointerexception 并且无法弄清楚它的起源,这让我相当愤怒。我需要第二双眼睛来帮助我弄清楚我在哪里犯了错误以及我需要做些什么来纠正它。提前致谢!
NPE 发生在:
alphabet = "abcdefghijklmnopqrxtuvwxyz";
numLetters = 26;
for (int count = 0; count < numLetters; count++) {
letterChoice[count] = new JButton(Character.toString(alphabet
.charAt(count)));
letterChoice[count].addActionListener(new CharacterListener(
alphabet.charAt(count)));
letterChoice[count].setMnemonic(65 + count);
add(letterChoice[count]);
}
这是我所有的代码。
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.ImageIcon;
import javax.swing.SwingConstants;
public class HangmanPanel extends JPanel {
private JLabel imageLabel, numberLetters, gameOver, youWin;
private JLabel[] spaces;
private ImageIcon[] images;
private JButton exitProgram, newGame, nextImage;
private JButton[] letterChoice;
private int imageNumber, letterNumber, numLetters, guesses;
private WordList wordRand;
private String word, alphabet;
public HangmanPanel() {
newGame = new JButton("New Game");
newGame.setEnabled(true);
newGame.setToolTipText("Press to restart game.");
newGame.addActionListener(new NewGame());
exitProgram = new JButton("Exit");
exitProgram.setEnabled(true);
exitProgram.setToolTipText("Press to close the program.");
exitProgram.addActionListener(new ExitGame());
wordRand = new WordList();
word = wordRand.getWord();
images = new ImageIcon[8];
// Populating the array
{
images[0] = new ImageIcon("hangman0.png");
images[1] = new ImageIcon("hangman1.png");
images[2] = new ImageIcon("hangman2.png");
images[3] = new ImageIcon("hangman3.png");
images[4] = new ImageIcon("hangman4.png");
images[5] = new ImageIcon("hangman5.png");
images[6] = new ImageIcon("hangman6.png");
images[7] = new ImageIcon("hangman7.png");
}
setBackground(Color.white);
imageLabel = new JLabel(images[imageNumber]);
imageNumber++;
add(imageLabel);
alphabet = "abcdefghijklmnopqrxtuvwxyz";
numLetters = 26;
for (int count = 0; count < numLetters; count++) {
letterChoice[count] = new JButton(Character.toString(alphabet
.charAt(count)));
letterChoice[count].addActionListener(new CharacterListener(
alphabet.charAt(count)));
letterChoice[count].setMnemonic(65 + count);
add(letterChoice[count]);
}
spaces = new JLabel[word.length()];
while (letterNumber < spaces.length) {
numberLetters = new JLabel("___");
add(numberLetters);
letterNumber++;
}
add(nextImage);
add(newGame);
add(exitProgram);
}
private class NewGame implements ActionListener {
public void actionPerformed(ActionEvent event) {
imageLabel.setIcon(images[0]);
imageNumber = 0;
imageNumber++;
imageLabel.repaint();
}
}
private class ExitGame implements ActionListener {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
}
private class CharacterListener implements ActionListener {
public CharacterListener(char charAt) {
}
public void actionPerformed(ActionEvent e) {
while (guesses < images.length) {
int count = 0;
while (count < word.charAt(count)) {
if (letterChoice[count].equals(word.charAt(count))) {
spaces[count] = new JLabel("" + letterChoice[count]
+ "");
count++;
} else
imageLabel.setIcon(images[imageNumber]);
imageNumber++;
imageLabel.repaint();
guesses++;
}
if (guesses == 7) {
gameOver = new JLabel(
"You lose! Press New Game to try again!");
add(gameOver);
} else
youWin = new JLabel(
"You win! Press New Game to play again or press Exit to remain Victorious!");
add(youWin);
}
}
}
}