如何在Processing中调试NullPointerException?

时间:2016-11-21 19:18:03

标签: processing

我正在制作动画处理它是一个上升和下降的球的模拟,我有一个错误说'NullPointerException'它一直出现我会给出代码并显示错误的地方:

Obj[] objs = new Obj[100];

void setup(){
  size(1000, 1000);
}

void draw(){
  background(250);
  for(int i = 0; i < objs.length; i++){
    objs[i].render();
    objs[i].up();
    objs[i].run();
  }
}

the error is at objs[i].render();

这是Obj的代码:

  class Obj{
  float x;
  float y;
  float speed;
  float pspeed;
  float velocity;
  void render(){
    fill(0);
    ellipse(x, y, 5, 5);
  }
  void up(){
    x = random(-1000, 1000);
    y = y-1010;
  }
  void run(){
    speed = random(4, 6);
    pspeed = speed;
    velocity = 0.05; 
    while(y<random(700, 1100)){
      y=y-speed;
      speed=speed-velocity;
    }

    while(y>0){
      y=y+pspeed;
      pspeed = pspeed - velocity;
    }
  }
}

1 个答案:

答案 0 :(得分:0)

此行创建一个可容纳100个Obj实例的数组:

Obj[] objs = new Obj[100];

但它实际上并没有创建任何实例。换句话说,您的数组包含100个null值。

然后你循环遍历那些null值并尝试调用它们上的函数,这就是造成错误的原因。

要解决此问题,您可能只想用实例填充数组:

void setup(){
  size(1000, 1000);

  for(int i = 0; i < objs.length; i++){
    objs[i] = new Obj();
  }
}

无耻的自我推销:我在Processing available here中编写了一个关于数组的教程。