Java Slick2d映射NullPointerException

Java Slick2d映射NullPointerException,java,slick2d,Java,Slick2d,我已经找了几个小时的空指针了,我觉得我一直在盯着同一个屏幕浪费时间 所以,我试图打开一个精灵表并从该表中获取一个图像,不幸的是,在我最好的尝试下,它返回了一个错误 我相信地图就是问题所在;我有一张地图,它记录了精灵工作表的标题和目录。当我尝试访问指定的SpriteSheet时,它返回一个NullPointerException 不管怎样,进入代码: package main; import java.util.HashMap; import java.util.Map; import org

我已经找了几个小时的空指针了,我觉得我一直在盯着同一个屏幕浪费时间

所以,我试图打开一个精灵表并从该表中获取一个图像,不幸的是,在我最好的尝试下,它返回了一个错误

我相信地图就是问题所在;我有一张地图,它记录了精灵工作表的标题和目录。当我尝试访问指定的SpriteSheet时,它返回一个NullPointerException

不管怎样,进入代码:

package main;

import java.util.HashMap;
import java.util.Map;

import org.newdawn.slick.Image;
import org.newdawn.slick.SlickException;
import org.newdawn.slick.SpriteSheet;

public class Resources {

    public static Map<String, SpriteSheet> sprites;
    public static Map<String, Image> images;

    public Resources(){
        sprites = new HashMap<String, SpriteSheet>();
        images = new HashMap<String, Image>();

        try {
            sprites.put("Tiles", getSpriteSheet("Tiles.png", 32, 32));
        } catch (SlickException e) {
            e.printStackTrace();
        }

    }

    private static SpriteSheet getSpriteSheet(String image, int w, int h) throws SlickException{
        return new SpriteSheet("/res/" + image, w, h);
    }

    public static Image getImage(String image, int x, int y) throws SlickException{
        Image img = sprites.get("Tiles").getSubImage(x, y);

        if(img != null){
            return img;
        }else{
            System.out.println("ERROR LOADING IMAGE");
            return null;
        }
    }

}
packagemain;
导入java.util.HashMap;
导入java.util.Map;
导入org.newdawn.slick.Image;
导入org.newdawn.slick.SlickException;
导入org.newdawn.slick.SpriteSheet;
公共类资源{
公共静态地图精灵;
公共静态地图图像;
公共资源(){
sprites=newhashmap();
images=newhashmap();
试一试{
sprites.put(“Tiles”,getSpriteSheet(“Tiles.png”,32,32));
}接住(滑溜){
e、 printStackTrace();
}
}
私有静态SpriteSheet getSpriteSheet(字符串图像,int w,int h)引发异常{
返回新的SpriteSheet(“/res/”+图像,w,h);
}
公共静态图像getImage(字符串图像,int x,int y)引发异常{
Image img=sprites.get(“Tiles”).getSubImage(x,y);
如果(img!=null){
返回img;
}否则{
System.out.println(“错误加载图像”);
返回null;
}
}
}

在没有看到堆栈跟踪的情况下,我猜问题发生在这一行:

Image img = sprites.get("Tiles").getSubImage(x, y);
这是因为,如果调用构造函数,则只为
精灵
赋值,因此如果在调用构造函数之前调用此静态方法,则会得到
NullPointerException

您可以将值分配给静态字段,如下所示:

public static Map<String, SpriteSheet> sprites = new HashMap<>();
public static Map<String, Image> images = new HashMap<>();

请编辑你的问题并发布一个StrackTraceGod捕获,我没看到它这么简单!该死的。
static {
  try {
    sprites.put("Tiles", getSpriteSheet("Tiles.png", 32, 32));
  } catch (SlickException e) {
    // ...
  }