尝试加载图像时,编译为jar会导致NullPointerException

时间:2012-12-08 01:25:55

标签: java image nullpointerexception

当前项目在Eclipse中运行时没有错误。但是,在导出到可运行的jar之后,它根本不起作用。从命令提示符运行会生成以下错误消息:

Uncaught error fetching image:
java.lang.NullPointerException
    at sun.awt.image.URLImageSource.getConnection(Unknown Source)
    at sun.awt.image.URLImageSource.getDecoder(Unknown Source)
    at sun.awt.image.InputStreamImageSource.doFetch(Unknown Source)
    at sun.awt.image.ImageFetcher.fetchloop(Unknown Source)
    at sun.awt.image.ImageFetcher.run(Unknown Source)

测试让我得出的结论是,当我尝试加载项目所需的图像时出现错误,其行类似于以下内容:

grassTile1 = rl.getImage("\\grassTile1.png");

rl是ResourceLoader的一个实例,其getImage如下:

public Image getImage(String x){
    URL y = this.getClass().getResource(x);
    System.out.println(y);
    Image img = tk.getImage(y);
    if(img==null) throw new IllegalArgumentException("Image at "+x+" not found.");
    System.out.println(y);
    return new ImageIcon(img).getImage();
}

tk是通过Toolkit.getDefaultToolkit();获得的。这些图像与jar中的ResourceLoader.class存在于同一目录中。注释掉对loadImages()的调用,其中包含仅存在给ResourceLoader的调用,导致程序运行,但显然没有图像资源。

程序在Eclipse中按预期运行。应该对引用的相对路径进行哪些更改,以便它们在编译到jar时能够正常运行?

编辑:根据反馈更改ResourceLoader.getImage()。

public Image getImage(String x){
    URL y = this.getClass().getResource(x);
    System.out.println(y);
    ImageIcon icon = new ImageIcon(getClass().getResource(x));
    Image i = icon.getImage();
    return i;
}

这比我写的原始getImage()函数更好还是更差?

UPDATE TWO:从传入getImage()的数据中删除前导斜杠修复了问题,如Perception所示。

0 个答案:

没有答案