2013-03-20 80 views
0

我正在写一个模拟骰子游戏'Sevens'的Java GUI。线程“main”中的JAVA异常java.lang.NullPointerException Sevens骰子游戏

我已经写了创建GUI的主要部分。

我还没有写出真正玩游戏的程序的实际部分。

一切编译正确,但我得到一个运行时错误:

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) 

我不知道是什么导致这个错误吗?

下面是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 

而实际运行的程序是

public class SevensApplication { 

    public static void main (String[] args) { 

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

    } 

} 

我不知道如果我只是没有完成的应用程序类部分GUI部分实际运行游戏或者如果我的代码中有错误?即使我没有代码来玩游戏,它是否会影响我制作的gui的显示?

+0

看看线88和13,看看他们有什么共同的连接点:d – pattmorter 2013-03-20 16:01:40

回答

4

您尚未初始化任何TextArea

赞&检查其他人。

labelPanel.add(outputCurrentPlayerTextArea); 

像这样初始化。

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

并为别人做TextArea也。

+0

谢谢你,这工作。 :) – user1368970 2013-03-21 20:10:37

1

add之前初始化的JLabel和文字区域荷兰国际集团他们

相关问题