0

我正在使用处理 2.0b7。我有一个 Spool 类,它应该有一个 Note 对象的 ArrayList。在 Spool 的 draw 方法中,我想在 ArrayList 的 draw 方法中调用每个 Note。但是,当我尝试使用此语法执行此操作时,我收到错误“

在 processing.core.PApplet.handleDraw(PApplet.java:2142) 的 spoolloops.draw(spoolloops.java:39) 处的线程“动画线程”java.lang.NullPointerException 中的异常) 在 processing.core.PGraphicsJava2D.requestDraw(PGraphicsJava2D.java:193) 在 processing.core.PApplet.run(PApplet.java:2020) 在 java.lang.Thread.run(Thread.java:662)

请注意这是处理环境,它运行某种 Java,但在重要方面有所不同。我知道语法非常不同,因为您不必为类中的方法声明范围或返回类型。但由于我不是 Java 出口,我不知道差异的确切方式和原因。

如果您想给出答案,请确保它可以在处理中工作,而不仅仅是 Java。我很确定这段代码会在纯 Java 环境中抛出各种错误,但这不是它正在运行的,所以没关系。该平台是处理。

class Spool {

  int diameter = 50;
  int i, angle;
  Note note, test;

  ArrayList<Note> notes;

  void Spool() {
    notes = new ArrayList<Note>();
    notes.add( note = new Note(100.0,100.0,100.0,100.0,100.0) );
    notes.add( note = new Note(120.0,120.0,120.0,120.0,120.0) );
  }

  void draw() {    
    for (int i = 0; i < notes.size(); i++) {
      test = (Note)notes.get(i);
      test.draw();

    }

    angle = angle + 1;
    if ( angle > 360 ) {
      angle = 0;
    }

  }
}

class Note {

  float diameter, x,y, start, stop;

  Note(float Diameter, float X, float Y, float Start, float Stop) {
    diameter = Diameter;
    x = X;
    y = Y;
    start = Start;
    stop = Stop;
  }

  void turn(float degrees) {
  }

  void draw() {
    strokeWeight(25);
    arc( x,y,diameter, diameter, radians(start), radians(stop));
  }
}

notes.size()infor循环似乎是导致问题的原因,但是当我将其更改为 时,i < 1错误发生在test = (Note)notes.get(i);. 我想 ArrayList 没有正确填充 Note 对象?

4

1 回答 1

2

类和对象初始化器不返回类型。从

void Spool()

将其保留为

Spool()

否则在创建期间不会调用它。

也不是完全有必要拥有

notes.add( note = new Note(100.0,100.0,100.0,100.0,100.0) );

据我了解,它可以简单地是:

notes.add(new Note(100.0,100.0,100.0,100.0,100.0) );
于 2013-01-11T15:14:56.773 回答