我最近一直在处理一个处理项目,并希望将它带入 Eclipse(与另一个用 Java 编写的类一起使用)。基本上这个项目是一个比赛模拟,我有一个包含 main()、setup() 和 draw() 的 TheRace 类,一个包含用于迭代比赛本身的所有代码的 Race 类,一个 Racer 类和扩展 Racer 的三个不同类别(不同类型的赛车手)。我已经导入了 core.jar 文件,并且没有语法错误(代码编译),但是当我运行代码时,我得到了这个错误:
Exception in thread "Animation Thread" java.lang.NullPointerException
at processing.core.PApplet.noStroke(PApplet.java:13845)
at Stepper.drawRacer(Stepper.java:15)
at Race.run(Race.java:29)
at TheRace.draw(TheRace.java:60)
at processing.core.PApplet.handleDraw(PApplet.java:2266)
at processing.core.PGraphicsJava2D.requestDraw(PGraphicsJava2D.java:243)
at processing.core.PApplet.run(PApplet.java:2140)
at java.lang.Thread.run(Thread.java:662)
这是错误开始的 Stepper 类:
import processing.core.PApplet;
public class Stepper extends Racer {
PApplet parent = new PApplet();
Stepper(String name, int loc, int ypos, PApplet p) {
super(1, name, loc, ypos,p);
}
public void move() {
location += speed;
}
public void drawRacer(int size, int finish) {
parent.noStroke();
parent.fill(242,109,125);
parent.rect((location*(1000-size*2))/finish, ypos, size, size);
}
}
构造函数包含名称、比赛沿线位置、车道位置和根据http://processing.org/learning/eclipse/所需的 PApplet 参数的参数。错误从 开始parent.noStroke();
,但不是唯一的noStroke()
,因为我尝试对其进行评论,但错误只是在下一行出现。我感觉这个错误与我使用 PApplet 的方式有关,但我不知道是什么。
编辑:所以我从我认识的人那里得到了意见,显然问题是我没有使用正确的 PApplet 父级。这是 Stepper 扩展的 Racer 类:
import processing.core.*;
public class Racer{
int location;
int speed;
String name;
int ypos;
PApplet parent;// = new PApplet();
Racer (int initspeed, String nema, int loc, int yposi, PApplet p) {
location = loc;
speed = initspeed;
name = nema;
ypos = yposi;
parent = p;
}
public PApplet getParent() {
return parent;
}
...
根据这个人的说法,在 Racer 类和 Stepper 类中都声明 PApplet 父级是错误的,而是在 Stepper 类的构造函数中从 Racer 类调用 PApplet。然而,令我困惑的是:如果 parent 只在 Racer 中声明过,Stepper 类引用了 Racer 类,而我从不告诉 Racer 类使用哪个 PApplet(即扩展 PApplet 的 TheRace 类),然后Racer 课程如何知道要使用哪个 PApplet?
提前致谢。