繁体   English   中英

尝试访问对象数组时发生NullPointerException

[英]NullPointerException when attempting to access array of objects

我正在为大富翁游戏编写Java代码,并且在SetPlayerName(tempName,numPlayersCounter)的行上得到了NullPointerException; 方法调用。 此方法在Player数组中设置Player的名称。 运行该程序时,控制台会说numPlayersCounter的值为1,Player数组playersArr的长度为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。

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

根据给出的信息,您尚未初始化playersArr数组。 在线上:

protected static Player [] playersArr;

或由于调用SetPlayerName()方法而需要对其进行初始化。 例如:

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

原因:

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

固定:

您需要playerArr Player对象添加到playerArr然后再尝试使用它们:

playerArr[numPlayersCounter] = new Player();
SetPlayerName(tempName, numPlayersCounter);

您还应该使用3个元素来启动playerArr ...:

protected static Player[] playerArr = new Player[3];

您初始化播放器了吗?

playersArr[numPlayersCounter] = new Player();      

接着

SetPlayerName(tempName, numPlayersCounter);      

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM