当前位置: 首页 > 知识库问答 >
问题:

将PGraphics的ArrayList创建从主类重构为单独类时出现空指针异常

危璞
2023-03-14

这段代码(都在一个类中)的工作原理是:

package tester;

import java.util.ArrayList;
import processing.core.*;

public class GraphicsMain extends PApplet{
int screenWidth = 800;
int screenHeight = 500;
String filepath = "/a/filepath/here/";
ArrayList<PGraphics> motifArray = new ArrayList<PGraphics>();
int stageWidth = 100; // eventually make this based on the motif's max width
int stageHeight = 400; // make this based on the motif's max height
PImage pic = loadImage(filepath + "small_jones6.png");
PImage pic2 = loadImage(filepath + "small_dresser10.png");


public void setup() {
    size(screenWidth,screenHeight,P3D);
    background(255);

    for (int i = 0; i < 2; i++) {
        motifArray.add(createGraphics(stageWidth,stageHeight,P3D));
        motifArray.get(i).beginDraw();
        motifArray.get(i).image(pic,10,10,100,90);
        motifArray.get(i).image(pic2,10,50,50,50);
        motifArray.get(i).endDraw();            
    }

    if (motifArray.get(0) == null) {
        System.out.println("The motif array is unfilled!");
    }
}

public void draw() {
    for (int i = 0; i < motifArray.size(); i ++) {
        image(motifArray.get(i),200+(400*i),100);

    }

}

static public void main(String[] passedArgs) {
    String[] appletArgs = new String[] { "GraphicsMain" };
    if (passedArgs != null) {
        PApplet.main(concat(appletArgs, passedArgs));
    } else {
        PApplet.main(appletArgs);
    }
}

}

下面的代码(重构为两个单独的类)不是:

**我注意到空指针异常中标识的两行[每个类中一行]

package tester;

import java.util.ArrayList;
import processing.core.*;

public class GraphicsMain extends PApplet{
int screenWidth = 800;
int screenHeight = 500;
PGraphicsMaker pgm = new PGraphicsMaker(this);
ArrayList<PGraphics> motifArray;

public void setup() {
    size(screenWidth,screenHeight,P3D);
    background(255);

    motifArray = pgm.makeMotifArray(); // ** NULL POINTER EXCEPTION HERE **

    if (motifArray.get(0) == null) {
        System.out.println("The motif array is unfilled!");
    }
}

public void draw() {
    for (int i = 0; i < motifArray.size(); i ++) {
        image(motifArray.get(i),200+(400*i),100);

    }


}

static public void main(String[] passedArgs) {
    String[] appletArgs = new String[] { "GraphicsMain" };
    if (passedArgs != null) {
        PApplet.main(concat(appletArgs, passedArgs));
    } else {
        PApplet.main(appletArgs);
    }
}

}
package tester;

import java.util.ArrayList;
import processing.core.PApplet;
import processing.core.PGraphics;
import processing.core.PImage;
import processing.core.*;

public class PGraphicsMaker {
String filepath = "/a/filepath/here/";
PApplet parent;
int stageWidth = 100; // eventually make this based on the motif's max width
int stageHeight = 400; // make this based on the motif's max height
ArrayList<PGraphics> motifArray;
PImage pic;
PImage pic2;

public PGraphicsMaker(PApplet pa) {
    PApplet parent = pa;
    pic = parent.loadImage(filepath + "small_jones6.png");
    pic2 = parent.loadImage(filepath + "small_dresser10.png");
}

public ArrayList makeMotifArray() {
    ArrayList<PGraphics> motifArray = new ArrayList<PGraphics>();
    for (int i = 0; i < 2; i++) {
            // ** NULL POINTER EXCEPTION on the line below **
       motifArray.add(parent.createGraphics(stageWidth,stageHeight,parent.P3D));
       motifArray.get(i).beginDraw();
       motifArray.get(i).image(pic,10,10,100,90);
       motifArray.get(i).image(pic2,10,50,50,50);
       motifArray.get(i).endDraw();
    }
    return motifArray;
}
}

共有1个答案

沈永新
2023-03-14

pgraphicsmaker的构造函数中,声明局部变量parent并为其分配pa

PApplet parent = pa;

...当我确定您打算将它分配给实例变量parent:

parent = pa;

在您的代码中,实例变量parent保持null,直到它被访问,并且结果为nullpointerexception

 类似资料:
  • 我打算从一个Java项目中提取几个类和包,并将它们放入另一个项目中(该项目将有一个可分发的jar)。这并不太难,但当然,进行如此大规模的重构会带来一些后果。也就是说,在原始项目中有许多类是我想要提取的类的子类。实现这种重构的最佳方法是什么?

  • 我有4个图像作为按钮,当选择正确的按钮时,会出现一个工作正常的箭头按钮。 我的问题是,我试图更改每个按钮的后台资源以在单击此箭头时进行更改,但我在该行得到一个空指针异常: 我已经在java onCreate中声明了nextArrow按钮- 类别: 日志: XML: 我错过了什么明显的东西吗?

  • 以下是在sun.reflect.nativeMethodAccessorImpl.Invoke0(本机方法)在sun.reflect.nativeMethodAccessorImpl.Invoke(未知源)在sun.reflect.NativeMethodAccessorImpl.Invoke(未知源)在java.lang.Reflect.Method.Invoke(未知源)在com.codena

  • 创建新的Arraylist(如第一种方法)与创建第二种方法之间的区别是什么?在创建一个时,您考虑了什么?

  • 我正在写一个任务,将文件从一个公共文件夹中的特定位置解压,如下所示 现在,当我执行任务时,它会给我NullPointerException,而没有其他细节。我不知道还需要什么。 这是我在stackTrace中得到的信息: 原因:java。org上的lang.NullPointerException。格雷德尔。应用程序编程接口。内部的文件IdentityFileResolver。doResolve(

  • 我试图展示一个祝酒词,当我的API请求不工作,由于没有互联网连接。首先,我尝试在try块失败时显示一个Toast,然后在catch块中显示这个Toast。我尝试了developer.android.com的方法,但我甚至无法启动应用程序。 我在catch-block中的代码是这样的: 我似乎对方法有问题,因为它突出显示为红色。这似乎是一个问题,因为我在一个片段内部使用这个。我在使用时读到了一些内容