我有一个名为ButtonList的自定义类,就像一个按钮列表,我将所有进入窗口的按钮添加到按钮列表的2d数组对象中。
ButtonList[][] buttonList;
buttonList = new ButtonList[5][3];
我正在尝试添加时,我不断收到Null指针错误 JButtons到buttonList。
this.buttonList[column][row].addButton(buttonImage);
ButtonList和addButton方法如下所示:
static class ButtonList{
int column = 0;
int row = 0;
JButton[][] arrayButton = new JButton[this.column][this.row];
void addButton(JButton BUTTON){
arrayButton[this.column][this.row] = BUTTON;
System.out.println("Row: " + this.row + " Column: " + this.column);
this.column += 1;
this.row += 1;
System.out.println("button inserted at " + this.row);
}//end addButton
我做错了什么? 感谢
答案 0 :(得分:0)
int column = 0;
int row = 0;
JButton[][] arrayButton = new JButton[this.column][this.row];
在调用构造函数之前初始化数组。所以此时你的列和行仍为0.然后初始化一个[0] [0]的数组。这就是为什么稍后你会得到一个空指针异常的原因,即使你可能在构造函数中更改了行和列的值,或者稍后在任何方法中也是如此。但在创作时他们是0。 而且
arrayButton[this.column][this.row] = BUTTON;
这很可能会给你一个超出范围的异常,因为java中的数组是0索引的,所以你的有效范围来自[0,column-1] [0,row-1]所以你可能想要修复它好。
答案 1 :(得分:0)
JButton[][] arrayButton = new JButton[this.column][this.row];
这一行创建一个2d数组(没有初始化),并且实际上相当于:
JButton[][] arrayButton = new JButton[0][0];
0恰好是当时列和行的值。更改这两个变量的值不会对它自己的数组产生任何影响。
解决方案: 如果事先知道列和行的最大值,请使用该值创建数组。如果没有,请使用ArrayList,以后可以更改大小。