我正在为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。
我需要做些什么来解决这个问题?任何帮助将不胜感激。
答案 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);