gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 05:41:34 25 4
gpt4 key购买 nike

我正在使用 Eclipse 用 Ja​​va 编写一个处理小程序。当我重构一个方法以从主类创建 PGraphics 的 ArrayList 到一个单独的类时,我不断收到空指针异常。全部写在主类中的方法有效(下面的第一个代码示例),它是不起作用的重构(第二对代码示例)。我到处寻找答案(有些相似但不匹配)并进行了大量重写,但没有骰子。看一看,在此先感谢您的帮助:

此代码(全部在一个类中)有效:

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);
}
}

}

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

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

第 1 类:

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);
}
}

}

第 2 类:

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;
}
}

任何帮助都会很棒。谢谢!

最佳答案

PGraphicsMaker 的构造函数中,您声明了一个局部变量 parent 并将 pa 分配给它。

PApplet parent = pa;

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

parent = pa;

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

关于java - 将 PGraphics 的 ArrayList 的创建从主类重构到单独的类时出现空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17375005/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com