0

Processing 2.0b7 を使用しています。Note オブジェクトの ArrayList を持つことになっている Spool クラスがあります。Spool の draw メソッドでは、ArrayList の draw メソッドで各 Note を呼び出したいと考えています。ただし、この構文でそれを実行しようとすると、エラーが発生します」

スレッド「アニメーション スレッド」での例外 java.lang.NullPointerException at spoolloops$Spool.draw(spoolloops.java:119) at spoolloops.draw(spoolloops.java:39) at processing.core.PApplet.handleDraw(PApplet.java:2142) ) で 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 環境では、このコードがあらゆる種類のエラーをスローすることは間違いありませんが、このコードが実行されている環境はそうではないため、問題にはなりません。プラットフォームはProcessingです。

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()ループ内が問題のfor原因のようですが、 に変更するとi < 1でエラーが発生しtest = (Note)notes.get(i);ます。ArrayList が正しく Note オブジェクトで満たされていないと思いますか?

4

1 に答える 1

2

クラスおよびオブジェクトの初期化子は型を返しません。から「void」を削除します

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 に答える