我最近一直在处理一个Processing项目,并希望将它带入Eclipse(与另一个用Java编写的类一起使用)。基本上这个项目是一个种族模拟,我有一个TheRace类,它包含main(),setup()和draw(),一个Race类,它包含了遍历种族本身的所有代码,一个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。然而,令我困惑的是:如果父类只在Racer中声明,Stepper类引用了Racer类,我从不告诉Racer类要绘制哪个PApplet(即扩展PApplet的TheRace类),然后任何一个Racer类如何知道要使用哪个PApplet?
提前致谢。
答案 0 :(得分:0)
问题是您在Stepper中创建了一个新的PApplet(可能在您拥有的任何其他子类中)。您只能拥有一个PApplet实例,我假设它是您的TheRace类(它扩展了PApplet并实现了设置和绘制)。
因此,您需要将该实例传递给应该有权访问Papplet方法的类。这就是你在Racer中已经做过的事了。但是只需删除子类中的PApplet父变量(这里:步进器),你就是好的。
关于您的编辑:您可以从子类(步进器)中的超类(此处为:Racer)访问非私有变量。