你好,我有一个 super 敌人
public abstract class Enemy {
protected Texture img; // Sprite image
public void setImage(String name){
this.img = new Texture(name);
}
public Texture getImage(){
return img;
}
}
}
现在我有了扩展 Enemy 的 Pirate 类
package com.mygdx.game;
import com.badlogic.gdx.graphics.Texture;
public class Pirate extends Enemy{
public Pirate(){
setImage("pirate.jpg"); // ERROR!
}
}
当我在构造函数上调用 setImage() 方法时,出现此错误
Exception in thread "main" java.lang.NullPointerException
at com.badlogic.gdx.graphics.Texture.<init>(Texture.java:88)
at com.mygdx.game.Enemy.setImage(Enemy.java:20)
at com.mygdx.game.Pirate.<init>(Pirate.java:9)
at com.mygdx.game.desktop.DesktopLauncher.main(DesktopLauncher.java:11)
那么这有什么问题吗?为什么我收到 java.lang.NullPointerException?
最佳答案
查看第 88 行 Texture
类的代码时,您可以看到调用了 Gdx.files
字段。
public Texture (String internalPath) {
this(Gdx.files.internal(internalPath));
}
所以我唯一能想到的是,你必须通过调用
自己初始化字段files
Gdx.files = new AnyClassImplementingFiles();
在您的 init() 方法中(或在使用 setImage(String)
之前调用的任何其他方法)
纹理.java:
https://github.com/libgdx/libgdx/blob/master/gdx/src/com/badlogic/gdx/graphics/Texture.java#L88
Gdx.java:
https://github.com/libgdx/libgdx/blob/master/gdx/src/com/badlogic/gdx/Gdx.java#L33
文件.java:
https://github.com/libgdx/libgdx/blob/master/gdx/src/com/badlogic/gdx/Files.java
关于java - libgdx 库的多态性错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26124230/