基本上,当网格中的某个点是播放器图标时,它将执行命令。 当我运行此命令时,我得到java.lang.NullPointerException:null。
if (arrButton[1][1].getIcon() == Player)
{
System.out.println("test complete");
}
答案 0 :(得分:0)
假设玩家在点击按钮时从一个按钮移动到另一个按钮,
首先有一个变量(可能是全局的)来保存玩家的当前位置,如下所示:
private int playerCurrentPositionX;
private int playerCurrentPositionY;
您的一个问题是java.lang.NullPointerException
。发生这种情况主要是因为异常指向的行上的对象为null。在您的情况下,正如@MadProgrammer指出的那样,它可以是arrButton
或arrButton[1][1]
。如果对象尚未初始化,则该对象为null。因此,对象不会为null,我们必须初始化它。在你的情况下是这样的:
JButton[][] arrButton = new JButton[11][11];
在这种情况下,只初始化JButtons的二维数组。 按钮本身尚未初始化。我们需要像这样初始化它们:
for (int i = 0; i < arrButton.length; i++) {
for (int j = 0; j < arrButton[i].length; j++) {
arrButton[i][j] = new JButton();
}
}
现在,为了检测是否点击了JButton,我们像这样添加ActionListener:
arrButton[i][j].addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//this method is executed when a button is clicked.
//TODO add logic here
}
}
有关如何使用ActionListeners的详细信息,请参阅this.
我们在方法中点击了哪个按钮并使用它来保存玩家的位置:
public void actionPerformed(ActionEvent e) {
JButton button = (JButton) e.getSource();
for (int i = 0; i < arrButton.length; i++) {
for (int j = 0; j < arrButton[i].length; j++) {
if (arrButton[i][j] == button) {
playerCurrentPositionX = i;
playerCurrentPositionY = j;
//you can also detect using i and j if this button/grid has a missile
}
}
}
}
有关java swing组件的更多信息here.