Java 阵列访问被拒绝

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();

嗯。我在上面声明了一个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();
            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")){