我正在使用 Eclipse 用 Java 编写一个处理小程序。当我重构一个方法以从主类创建 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);
}
}
}
下面的代码(重构为两个单独的类)没有:
** 我已经注意到空指针异常中标识的两行 [每个类中的一个]
第一类:
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;
}
}
任何帮助都会很棒。谢谢!