在Eclipse中运行多类Processing项目

时间:2013-04-30 03:31:06

标签: java eclipse class nullpointerexception processing

我最近一直在处理一个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?

提前致谢。

1 个答案:

答案 0 :(得分:0)

问题是您在Stepper中创建了一个新的PApplet(可能在您拥有的任何其他子类中)。您只能拥有一个PApplet实例,我假设它是您的TheRace类(它扩展了PApplet并实现了设置和绘制)。

因此,您需要将该实例传递给应该有权访问Papplet方法的类。这就是你在Racer中已经做过的事了。但是只需删除子类中的PApplet父变量(这里:步进器),你就是好的。

关于您的编辑:您可以从子类(步进器)中的超类(此处为:Racer)访问非私有变量。