加工:你能在加工课之外画画吗?

问题描述

我正在尝试将代码组织到可以在主处理类之外绘制的位置,但是,每当我尝试这样做时,我都会收到 NullPointerExeption

public class Processing extends papplet {

    papplet p = new papplet();
    Screen homeScreen = new Screen(new Vector2(0,0),p);

    public static void main(String[] args) {
        papplet.runSketch(new String[]{"Processing"},new Processing());


    }

    public void settings() {
// Setup
        size(500,500);

        TextBox t = new TextBox(new Vector2(0,new Vector2(300,300),new papplet());
        homeScreen.addContent(t);
    }
}

我正在调用如下所示的 display() 类中的 TextBox 方法

public void display() {

        // Text Box Body
        p.pushmatrix();
        p.fill(240);
        p.rect(pos.getPos()[0],pos.getPos()[1],dimensions.getPos()[0],dimensions.getPos()[1]);

    }

p 是通过构造函数传递的 papplet 对象。例外如下所示。

java.lang.NullPointerException
    at processing.core.papplet.pushmatrix(papplet.java:13149)
    at TextBox.display(Processing.java:154)
    at Screen.display(Processing.java:83)
    at Processing.draw(Processing.java:29)
    at processing.core.papplet.handleDraw(papplet.java:2426)
    at processing.awt.PSurfaceAWT$12.callDraw(PSurfaceAWT.java:1557)
    at processing.core.PSurfaceNone$AnimationThread.run(PSurfaceNone.java:316)

Process finished with exit code 0

如果我注释掉 pushmatrix() 也会发生同样的错误,只需指向 fill() 函数即可。

感谢您的帮助!

解决方法

注意:您正在创建 PApplet 的多个实例,这会使您的代码混乱,并且您会遇到错误。 Processing 类已经扩展了 PApplet,因此删除此行 PApplet p = new PApplet(); 并将其替换为 Processing p = this;,或者您可以使用 new Screen(new Vector2(0,0),p); 代替 this像这样的关键字:new Screen(new Vector2(0,this); - 谢谢@sorifiend