java 2维数组 报错

来源:百度知道 编辑:UC知道 时间:2024/09/24 12:09:49
我要在一个Panel里放很多Button,就先定义了一个2维按钮数组,然后在函数里new了下,但运行是报错:NullPointerException 麻烦给看下,谢谢了!

class Graphical_Interface{
....
Button[][] b;
...

public void go(){
b=new Button[8][21];
for(int i=0;i<8;i++)
for(int j=0;j<21;j++){
b[i][j].setVisible(false);
}//for
}//go
...
}//class

呃。。在定义Button时使用new分配空间,还是不行~~

你虽然定义button这个类型的数组了,但是数组里的东西还不是button,所以不能调用button的方法 应该在b[i][j].setVisible(false);前面声明再给b[i][i]赋下值,
public void go(){
b=new Button[8][21];
for(int i=0;i<8;i++)
for(int j=0;j<21;j++){
b[i][j] = new Button();
b[i][j].setVisible(false);
}//for
}//go
...
}//class

public void go(){
b=new Button[8][21];
for(int i=0;i<8;i++)
for(int j=0;j<21;j++){
b[i][j] = new Button();
b[i][j].setVisible(false);
}//for
}//go
...
}//class

LZ是不是认为new Button[8][21]创建了8*21个Button对象,其实不然,new Button[8][21]实际上仅仅是创建了一个为8*21长度的数组对象,注意是一个对象,不是8*21个Button对象,这个数组对象你可以把他看作是含有8*21个指向Button类型的引用变量的对象,为什么会抛出NullPointerException呢?这主要是因为java的变量初始化机制

class Graphical_Interface{
....
Button[][] b;
...

public void go(){
b=new Button[8][21];//这里你建立了一个长度为8*21的数组对象,对象含有8*21个Button引用变量,为了给这些变量一个初始状态,jvm会为这些