从res文件夹加载图像

huangapple 未分类评论44阅读模式
英文:

Loading image from res folder

问题

我正在完成作业中的编程游戏,尝试从"res"文件夹加载图像,但出现了"NullPointerException"错误:

	at java.desktop/javax.imageio.ImageIO.read(ImageIO.java:1400)
	at prg_hra/esrever.BufferedImageLoader.loadImage(BufferedImageLoader.java:15)
	at prg_hra/esrever.Hra.init(Hra.java:38)
	at prg_hra/esrever.Hra.run(Hra.java:61)
	at java.base/java.lang.Thread.run(Thread.java:834)```

"res"文件夹已经在**Java Build Path**中,我99%确定路径是正确的。我有一个"BufferedImageLoader"类:

```java
public class BufferedImageLoader {
    
    private BufferedImage image;
    
    public BufferedImage loadImage(String path) {
        
        try {
            image = ImageIO.read(getClass().getResource(path));
        } catch (IOException e) {
            e.printStackTrace();
        }
        return image;
    }

我在游戏类的"init"方法中使用它:

private void init() {
    
    WIDTH=getWidth();
    HEIGHT=getHeight();

    BufferedImageLoader loader = new BufferedImageLoader();
    level = loader.loadImage("/res/level.png");        

    handler = new Handler();

    kam=new Kamera(0,0);

    handler.addObjekt(new Hrac(100, 100, handler, ObjektID.Hrac));

    handler.createLevel();

    this.addKeyListener(new KeyInput(handler));
}

我已经查看了其他人类似问题的解决方法,但他们大多只是使用了错误的路径。

编辑:我还尝试过

level = loader.loadImage("level.png");

level = loader.loadImage("/level.png");

都没有成功。

英文:

Iam coding game as part of my homework and I'm trying to load a image from res folder but I'm getting NullPointerException:

```Exception in thread "Thread-0" java.lang.IllegalArgumentException: input == null!
at java.desktop/javax.imageio.ImageIO.read(ImageIO.java:1400)
at prg_hra/esrever.BufferedImageLoader.loadImage(BufferedImageLoader.java:15)
at prg_hra/esrever.Hra.init(Hra.java:38)
at prg_hra/esrever.Hra.run(Hra.java:61)
at java.base/java.lang.Thread.run(Thread.java:834)```

The res folder is already in Java Build Path and I'm 99% sure that I'm putting in the right path. I got BufferedImageLoader Class:

public class BufferedImageLoader {
	
	private BufferedImage image;
	
	public BufferedImage loadImage(String path) {
		
		try {
			image = ImageIO.read(getClass().getResource(path));
		} catch (IOException e) {
			e.printStackTrace();
		}
		return image;
	}

and I'm using it in inti metode in game class:

private void init() {
	
	WIDTH=getWidth();
	HEIGHT=getHeight();

	BufferedImageLoader loader = new BufferedImageLoader();
	level = loader.loadImage("/res/level.png");		
	
	handler = new Handler();
	
	kam=new Kamera(0,0);
	
	handler.addObjekt(new Hrac(100, 100, handler, ObjektID.Hrac));
	
	handler.createLevel();
	
	this.addKeyListener(new KeyInput(handler));
}

I've looked at some similar problems of other people, but they mostly just used wrong path..

EDIT: I also tried
level = loader.loadImage("level.png");
and
level = loader.loadImage("/level.png");
neither worked.

答案1

得分: 0

尝试使用 level = loader.loadImage("level.png"); 替代 level = loader.loadImage("/res/level.png");

如果您想获取资源,无需编写资源目录。

英文:

Try that level = loader.loadImage("level.png"); instead of level = loader.loadImage("/res/level.png");

If you are trying get resource you don't need to write resources directory.

huangapple
  • 本文由 发表于 2020年4月11日 02:35:22
  • 转载请务必保留本文链接:https://java.coder-hub.com/61146563.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定