java - libgdx 库的多态性错误

标签 java libgdx polymorphism

你好,我有一个 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/

相关文章:

java - 快速排序。线程中出现异常 "main"java.lang.StackOverflowError

Java Guice - toProvider 方法不适用于参数

Java class.getResourceAsStream 不适用于带前导点的文件

java - Java 和多线程中的命名管道

java - java中父类和子类的接口(interface)实现

java - Sprite 旋转无法正常工作 LibGDX

java - 如何在 Libgdx 中调整 Sprite 的大小?

java - 输入未获取正确的坐标 libgdx java

delphi - Spring 框架中是否有内置的方法可以使多态容器的使用变得更容易?

c++ - 将工作委托(delegate)给父类(super class)的构造函数