1

I'm writing a Java GUI that simulates the dice game 'Sevens'.

I've got the main parts written to create the GUI.

I've yet to write the actual parts of the program to actually play the game.

Everything compiles correctly, but I get a runtime error:

Exception in thread "main" java.lang.NullPointerException
    at java.awt.Container.addImpl(Unknown Source)
    at java.awt.Container.add(Unknown Source)
    at SevensGameGUI.,init.(SevensGameGUI.java:88)
    at SeventsApplication.main(SevensApplication.java:13)

I'm not sure what's causing the error?

Here is the code for the SevensGameGUI.java:

//include these import statements in every GUI class
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class SevensGameGUI extends JFrame {

     //Instance Variables
     // declares an array of integers to store the total score for each player
     // allocates memory for 5 players
      int[] totalScoreArray = new int[4];

      //declares an array of integers to store numbers rolled each time someone rolls the dice
      //allocates memory for at least 3 rolls
      int[] diceRollArray= new int[2];

      //declare an integer amount for the number of dice being rolled in the current turn
      int diceCount;

      //declare an integer to keep track of track of who the current player is
      int playerNumber;

      //declare a constant for the maximum throws allowed (three)
      public static final int MAX_THROWS = 3; 

      //declare an integer to remember how many times the first player rolled the dice
     int firstPlayerRolls;

     //declare an integer to keep count of the current player's rolls
     int currentPlayerRolls;

     //declare an integer to keep track of who is currently winning
     int winningPlayer;

     //declare all necessary GUI-related variables
     //JButtons:
     private JButton rollDiceButton;
     private JButton totalScoreButton;
     private JButton endTurnButton;

     //JLabels:
     private JLabel displayCurrentPlayerLabel;
     private JLabel displayFirstPlayerRollsLabel;
     private JLabel displayTotalScoreLabel;

     //JTextAreas:
     private JTextArea outputCurrentPlayerTextArea;
     private JTextArea outputFirstPlayerRollsTextArea;
     private JTextArea outputTotalScoreTextArea;
     private JTextArea outputDiceRollTextArea;
     private JTextArea outputTextArea;

     //JPanels:
     private JPanel labelPanel;
     private JPanel buttonPanel;


     //Declare an event-listener object of type SevensGameListener
     SevensGameListener listener;

//--------------------------------------------------------------------------------------------- 

//CONSTRUCTOR
public SevensGameGUI() {
super("Sevens Dice Game");

    //Initialize Buttons:
    rollDiceButton = new JButton("Roll Dice");
    totalScoreButton = new JButton("Total Your Score");
    endTurnButton = new JButton("End Turn");

    //Initialize Labels:
    displayCurrentPlayerLabel = new JLabel("Current Player: ");
    displayFirstPlayerRollsLabel = new JLabel("First player only rolled: ");
    displayTotalScoreLabel = new JLabel("Total Score: ");

    //Initialize Panels:
    labelPanel = new JPanel();
    labelPanel.setLayout(new GridLayout(3,2));
    labelPanel.add(displayCurrentPlayerLabel);
    labelPanel.add(outputCurrentPlayerTextArea);
    labelPanel.add(displayFirstPlayerRollsLabel);
    labelPanel.add(outputFirstPlayerRollsTextArea);
    labelPanel.add(displayTotalScoreLabel);
    labelPanel.add(outputTotalScoreTextArea);

    buttonPanel = new JPanel();
    buttonPanel.setLayout(new GridLayout(1,3));
    buttonPanel.add(rollDiceButton);
    buttonPanel.add(totalScoreButton);
    buttonPanel.add(endTurnButton);

    //Set The Layout as Border Layout
    this.setLayout(new BorderLayout());
    this.add(labelPanel, BorderLayout.NORTH);
    this.add(outputTextArea, BorderLayout.CENTER);
    this.add(buttonPanel, BorderLayout.SOUTH);

    //initilize/register Listener
    listener = new SevensGameListener();

    rollDiceButton.addActionListener(listener);
    totalScoreButton.addActionListener(listener);
    endTurnButton.addActionListener(listener);

    this.addWindowListener(listener);   

}//end of constructor

//---------------------------------------------------------------------------------------------

private class SevensGameListener implements ActionListener, WindowListener {

public void actionPerformed(ActionEvent ae) {

    if (ae.getSource() == rollDiceButton) {

    }
    if (ae.getSource() == totalScoreButton) {

    }
    if (ae.getSource() == endTurnButton) {
        playerNumber += 1;
    }


    outputTextArea.append(" ");         

}//end of method actionPerformed

public void windowClosing(WindowEvent we) {

     System.exit(0);            

}//end of windowClosing

public void windowDeactivated(WindowEvent we) { }
public void windowActivated(WindowEvent we) { }
public void windowClosed(WindowEvent we) { }
public void windowDeiconified(WindowEvent we) { }
public void windowIconified(WindowEvent we) { }
public void windowOpened(WindowEvent we) {  }



}//end of class CalculatorListener


}// end of SevensGameGUI class

And the Application Class that actually runs the program is

public class SevensApplication {

    public static void main (String[] args) {

        SevensGameGUI gui = new SevensGameGUI();
        gui.pack();
        gui.setVisible(true);

    }

}

I'm not sure if I've just not completed part of the GUI part to actually run the game or if there is an error in my code? Even though I don't have the code to play the game in there yet, should it affect the display of the gui I made?

4

2 に答える 2

5

のいずれも初期化していないTextArea

他の人をいいね&チェックします。

labelPanel.add(outputCurrentPlayerTextArea);

このように初期化します。

outputCurrentPlayerTextArea = new TextArea("Hello", 5, 40);

そして他の人のためにTextAreaもやってください。

于 2013-03-20T15:48:31.567 に答える
2

jlabelsとtextareasをaddingする前に初期化します

于 2013-03-20T15:49:00.050 に答える