You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Processing中二维Rectangle对象数组空指针异常求助

解决Processing中二维Rectangle数组的NullPointerException问题

我来帮你拆解下你遇到的这个空指针异常问题——其实原因很直白,你只创建了二维数组的“架子”,但没给数组里的每个位置真正放上Rectangle对象,所有元素默认都是null,当你试图操作这些空对象时,自然就会触发NullPointerException。

先看你代码里的关键问题点:

Rectangle[][] player = new Rectangle[numberOfRects][numberOfRects];

这行代码只是创建了一个能容纳10×10个Rectangle引用的数组结构,但每个数组元素都是空的,没有实际的矩形对象实例。

解决方案:先初始化数组中的所有Rectangle实例

你需要在setup()方法里,先遍历数组,给每个位置创建对应的Rectangle对象,之后再在draw()里使用它们。修改后的代码大概是这样:

首先完善setup():

void setup(){
  background(200);
  size(565, 565);
  // 遍历二维数组,为每个位置创建Rectangle实例
  for(int i = 0; i < numberOfRects; i++){
    for(int j = 0; j < numberOfRects; j++){
      // 根据索引计算每个矩形的坐标,这里的5是矩形之间的间距(对应你循环里的55=50+5)
      float rectX = edge + i * (sizeOfRect + 5);
      float rectY = edge + j * (sizeOfRect + 5);
      // 实例化Rectangle对象并放入数组
      player[i][j] = new Rectangle(rectX, rectY, sizeOfRect, sizeOfRect);
    }
  }
}

然后修改draw()方法,直接遍历数组索引来绘制矩形(比你原来的坐标循环更清晰不易错):

void draw(){
  background(200); // 每次绘制前刷新背景,避免画面重叠
  for(int k = 0; k < numberOfRects; k++){
    for(int l = 0; l < numberOfRects; l++){
      // 现在数组里的每个元素都是有效的Rectangle实例,不会空指针
      player[k][l].display();
    }
  }
}

另外,还要确保你的Rectangle类有正确的构造方法和绘制逻辑,比如:

class Rectangle {
  float x, y, width, height;
  
  // 构造方法,初始化矩形的位置和大小
  Rectangle(float x, float y, float width, float height){
    this.x = x;
    this.y = y;
    this.width = width;
    this.height = height;
  }
  
  // 绘制矩形的方法
  void display(){
    fill(255); // 填充白色
    stroke(0); // 黑色边框
    rect(x, y, width, height);
  }
}

额外提醒

  • 你原来代码里的k、l是全局变量,建议在循环里用局部变量(像上面代码里的i、j、k、l),避免全局变量带来的意外问题
  • 每次draw()里记得刷新背景,不然矩形会重复绘制叠加在一起

这样调整后,你的二维矩形数组就能正常绘制,不会再出现空指针异常了。

内容的提问来源于stack exchange,提问作者TedOiler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:42:51