[英]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.