gpt4 book ai didi

java - Slick2d map NullPointerException

转载 作者:行者123 更新时间:2023-12-01 22:18:35 25 4
gpt4 key购买 nike

我已经找空指针几个小时了,感觉就像我一直盯着同一个屏幕浪费时间。

因此,我尝试打开 SpriteSheet 并从该表中获取图像,不幸的是,在我的最佳尝试下,它返回了错误。

我相信 map 是问题所在;我有一个 map ,记录了 Sprite 表的标题和目录。当我尝试访问指定的 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;
}
}

}

最佳答案

如果没有看到堆栈跟踪,我会猜测问题发生在这一行:

Image img = sprites.get("Tiles").getSubImage(x, y);

这是因为如果您调用构造函数,您只会为 sprites 赋值,因此如果您在发生之前调用此静态方法,您将得到一个 NullPointerException调用构造函数。

您可以为静态字段分配一个值,如下所示:

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

然后删除构造函数中的赋值。

您可能还需要考虑将静态字段设置为私有(private)字段和最终字段,以最大限度地减少可见性并避免意外重新分配。

如果您想将 Tiles.png Sprite 表放入这些静态 map 中,您可以使用静态初始化 block 来完成此操作:

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

关于java - Slick2d map NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30428882/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com