尝试访问对象数组时出现NullPointerException

时间:2015-04-20 02:45:22

标签: java nullpointerexception

我正在为Monopoly游戏编写Java代码,并且我在使用SetPlayerName(tempName,numPlayersCounter)的行上获得了NullPointerException;方法调用。此方法在Player数组中设置Player的名称。程序运行时,控制台说numPlayersCounter的值为1,Player数组playerArr的长度为3。

        sc2.ok1Button.addActionListener(new ActionListener() //middle ok button
    {
        public void actionPerformed(ActionEvent e)
        {
            System.out.println("Name ok button pressed");
            System.out.println("Name is:" + sc2.nameField.getText());
            String tempName = sc2.nameField.getText();
            System.out.println("numPlayersCounter value: " + numPlayersCounter);

            SetPlayerName(tempName, numPlayersCounter);
            System.out.println("Player " + numPlayersCounter + "name: " +playersArr[numPlayersCounter].GetName());
            sc2.EnableName(false);
            sc2.EnablePieces(true);


        }
    });

方法SetPlayerName定义为:

    public static void SetPlayerName(String n, int id)
    {   playersArr[id].SetName(n);    }

和playersArr在构造函数和main之前声明为:

    protected static Player [] playersArr; //player 0 is the bank   

在Player.java中,名称在构造函数中设置为空字符串,SetName方法定义为:

    public void SetName(String n)
    {   name = n;   }

我试图直接从actionPerformed方法设置名称并递增另一个Player变量。问题似乎是访问正确的数组元素,但它应该访问长度为3的数组的元素1。

我需要做些什么来解决这个问题?任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:0)

根据提供的内容,您尚未初始化playersArr数组。在线:

protected static Player [] playersArr;

或任何时候因为你需要初始化它而调用SetPlayerName()方法。例如:

protected static Player [] playersArr = new Player[]{/*Stuff in array*/};

答案 1 :(得分:0)

原因:

您有一个空数组列表,即playerArr[0] = null;SetPlayerName方法引用playerArr[id],其中包含null指针。

修正:

在尝试使用Player之前,您需要向playerArr添加playerArr[numPlayersCounter] = new Player(); SetPlayerName(tempName, numPlayersCounter); 个对象,请尝试以下操作:

playerArr

你也应该发起protected static Player[] playerArr = new Player[3]; ,还有3个元素......:

{{1}}

答案 2 :(得分:0)

您是否初始化了播放器?

playersArr[numPlayersCounter] = new Player();      

然后

SetPlayerName(tempName, numPlayersCounter);