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
相关产品推荐
相关产品推荐

