我遇到问题,我创建了一个对象数组,但是当我尝试对其进行处理时,我得到java.lang.NullPointerException
。
这是有问题的班级。
public class Blocks {
public static Block[] b = new Block[8];
public Blocks() throws IOException {
new Air (b[0]);
new Stone(b[1]);
new Grass(b[2]);
new Dirt (b[3]);
}
这是Block。
public class Block {
private Texture Texture = null;
private int S = World.BLOCK_SIZE;
private boolean hasTexture = true;
private String texturePath = null;
public void setTexture(String path) throws IOException {
this.texturePath = path;
Texture = TextureLoader.getTexture("PNG", new FileInputStream(new File(path)));
}
public void draw(int Xa, int Ya) {
GL11.glTranslatef(Xa, Ya, 0);
//GL11.glRotatef(0, 0, 1, 0);
//GL11.glRotatef(0, 1, 0, 0);
if(hasTexture) {
Texture.bind();
GL11.glBegin(GL11.GL_QUADS);
GL11.glColor3f(0.5f, 0.5f, 1);
//GL11.glNormal3f(0, 0, 1);
GL11.glTexCoord2f(0, 0);
GL11.glVertex2f(0, 0);
GL11.glTexCoord2f(0, 1);
GL11.glVertex2f(0, S);
GL11.glTexCoord2f(1, 1);
GL11.glVertex2f(S, S);
GL11.glTexCoord2f(1, 0);
GL11.glVertex2f(S, 0);
GL11.glEnd();
}
}
void hasTexture(boolean b) {
this.hasTexture = b;
}
}
如果我需要提供更多信息/代码,请告诉我
答案 0 :(得分:3)
这样做
public class Blocks {
public static Block[] b = new Block[8];
static {
// Instantiating the objects present in the array
for(int i=0; i<b.length; i++)
b[i] = new Block();
}
public Blocks() throws IOException {
// Now you can access them
new Air (b[0]);
new Stone(b[1]);
new Grass(b[2]);
new Dirt (b[3]);
}
您忘记实例化数组中的对象。所以它提示空指针异常
答案 1 :(得分:2)
对于初学者,你可以看一下: -
public static Block[] b = new Block[8];
public Blocks() throws IOException {
new Air (b[0]);
new Stone(b[1]);
new Grass(b[2]);
new Dirt (b[3]);
}
您尚未实例化数组元素。 b[0], b[1], etc..
仍然是null
个引用。
答案 2 :(得分:2)
您似乎正在创建一个名为b的空数组,其中包含8个插槽(类型为块),然后使用对(空)数组的引用来实例化对象(例如new Air (b[0]);
)。
如果Air的构造函数无法处理可能是空指针异常源的空参数
尝试在b
首先放置一些对象