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