Java 阵列访问被拒绝
嗯。我在上面声明了一个2D数组,如下所示:Java 阵列访问被拒绝,java,arrays,jpanel,Java,Arrays,Jpanel,嗯。我在上面声明了一个2D数组,如下所示: private JPanel[][] panels = new JPanel[10][8]; 然后我把它填成这样: GridBagConstraints c = new GridBagConstraints(); for(int i = 0; i < 8; i++){ for(int j = 0; j < 10; j++){ JPanel temp = new JPanel();
private JPanel[][] panels = new JPanel[10][8];
然后我把它填成这样:
GridBagConstraints c = new GridBagConstraints();
for(int i = 0; i < 8; i++){
for(int j = 0; j < 10; j++){
JPanel temp = new JPanel();
if(rand.nextInt(10)+1 > 8 && (j != 0 && i != 0)){
temp.setBackground(Color.BLACK);
temp.setName("wall");
}else{
temp.setBackground(Color.WHITE);
temp.setName("space");
}
c.gridx = j;
c.gridy = i;
boardCotent.add(temp,c);
panels[j][i] = temp;
}
}
}
所以很明显,它起作用了
然后在一个开关中,我试图访问它,看看它是“墙”还是“空间”,我得到一个空指针异常。。。有人看到我丢失的一个缺陷吗
if(y > 0 && !panels[x][y-1].getName().matches("wall")){
y--;
}
首先,这部分有问题。您应该具有空格,而不是null
值
if(y > 0 && !panels[x][y-1].getName().matches("wall"))
{
y--;
}
第二,检查0您确定没有混合两个数组维度的索引吗?
只需尝试以下方法进行检查:
int maxY = 10, maxX = 8;
private JPanel [][] panels = new JPanel[maxY][maxX];
for(int y = 0; y < maxY; y++)
for(int x = 0; x < maxX; x++)
{
panels[y][x] = new JPanel();
System.out.println("array[y=" + y + "][x=" + x + "] = " + panels[y][x]);
}
intmaxy=10,maxX=8;
私有JPanel[][]面板=新JPanel[maxY][maxX];
对于(int y=0;y
这有用吗?你正在获得NPE
if(y > 0 && !panels[x][y-1].getName().matches("wall")){
y--;
}
意味着您需要执行一些空检查
if(y > 0 && panels[x][y-1] != null && !panels[x][y-1].getName().matches("wall")){
当y
为3
且x
为3
或4
时,panels[x][y-1]
为空。我没有将其粘贴在此处。这是一个私人变量上的开关,指示玩家的方向。因此y或x是递增/递减的。从周日开始,我一直在测试开关,一切正常。我将问题隔离到此阵列。。。我现在已经把它修好了,我正在努力刷新我的窗格,以便在我的棋盘上“移动”我的播放器。。。如果我在我的研究和文档中找不到任何东西,我会就此发表一个问题。谢谢大家的回复!:)对,很抱歉,我从输出中粘贴了错误的信息。在中间的两个上写的是空格和NOTNULL。。对不起。。我把支票放在密码里了,好主意。但它并没有解决这个问题。在我停止尝试将JLabel上的图标放入面板后,它开始工作。。。所以我现在正在研究这个问题。感谢您的输入(Cyril.:)
int maxY = 10, maxX = 8;
private JPanel [][] panels = new JPanel[maxY][maxX];
for(int y = 0; y < maxY; y++)
for(int x = 0; x < maxX; x++)
{
panels[y][x] = new JPanel();
System.out.println("array[y=" + y + "][x=" + x + "] = " + panels[y][x]);
}
if(y > 0 && !panels[x][y-1].getName().matches("wall")){
y--;
}
if(y > 0 && panels[x][y-1] != null && !panels[x][y-1].getName().matches("wall")){