0

我想创建一个图形,其中为ArrayList. 预期的最终结果是水平方向上的一系列矩形,用于ArrayList.

我尝试了以下代码,但NullPointerException在执行代码时出现错误。谁能告诉我如何获得我期望的输出?

import processing.core.*;
public class Processing extends PApplet {
    ArrayList<Integer> test = new ArrayList<Integer>();
    private PApplet parent;

    int x = 100;
    int y = 100;
    public void setup() {
          size(640, 600);
          background(255);
          test.add(10);
            test.add(20);
            test.add(30);
          noLoop();
        }

        public void draw() {
          for(int testing: test){
              printTask(x,y);
          }
        }

        public void printTask(int x, int y){
            parent.rect(10,10,x,y);
        }
        static public void main(String args[]) {
            PApplet.main(new String[] { "--bgcolor=#ECE9D8", "Processing" });
        }
}

异常的堆栈跟踪:

Exception in thread "Animation Thread" java.lang.NullPointerException
  at Processing.printTask(Processing.java:30)
  at Processing.draw(Processing.java:25)
  at processing.core.PApplet.handleDraw(PApplet.java:1602)
  at processing.core.PApplet.run(PApplet.java:1503)
  at java.lang.Thread.run(Unknown Source)
4

3 回答 3

1

parent变量未在任何地方初始化。作为Processing扩展PApplet,您可以摆脱parent变量并更改printTask

public void printTask(int x, int y){
    rect(x, y, 10, 10);
}

您还需要更改 draw 以使用您的值List

public void draw() {
    for(int testing: test){
        printTask(x + testing, y);
    }
}
于 2013-07-04T15:22:25.753 回答
1

尝试这个:

import java.util.ArrayList;

import processing.core.PApplet;


public class Processing extends PApplet {
    ArrayList<Integer> test = new ArrayList<Integer>();

    int x = 100;
    int y = 100;

    public void setup() {
        size(640, 600);
        background(255);
        test.add(10);
        test.add(20);
        test.add(30);
        noLoop();
    }

    public void draw() {
        for (int testing : test) {
            printTask(x + testing, y);
        }
    }

    public void printTask(int x, int y) {
        rect(x, y, 10, 10);
    }

    static public void main(String args[]) {
        PApplet.main(new String[] { "--bgcolor=#ECE9D8", "Processing" });

}

}

我不知道你为什么现在想要父参考。正如人们已经评论的那样,您的 x,y 订单有点混乱。另请注意,我正在传递printTask这样的电话:

printTask(x + testing, y);

如果您只是按原样传递 x,则所有正方形都将绘制在同一位置,因为 x 不会改变。

于 2013-07-04T15:26:39.857 回答
0

如果以处理方式编写,这就是您的代码的外观;-) 由于您没有使用存储在测试中的值,因此我将它们用于正方形大小...此外,我会说方法应该以描述性的方式命名,有些像“drawRects()”

[编辑] 我编辑了代码以更接近您的目标描述,我认为... :)

    ArrayList<Integer> test = new ArrayList<Integer>();

void setup() {
  size(640, 600);
  background(255);
  for (int i = 1; i< 60;i++){
    test.add(i*10);
  }
  noFill();
  noLoop();
}

void draw() {
  for (int testing: test) {
    printTask(testing,testing);
  }
}

void printTask(int x, int y) {
  rect(x, 10, 10, y);
}
于 2013-07-05T15:55:21.880 回答