获取图像的路径并使用BufferedImage加载它

时间:2014-09-11 16:02:32

标签: java filepath image-loading

我不知道为什么在Java中它应该如此复杂,但我已经花了好几个小时就可以了。我在\ src \ resources \ resize-cursor.png

中有一个png图像

现在,我想将此图片与BufferedImage class

一起使用
BufferedImage myPicture = null;

try {
    // this is just one of the examples I tried... I've already tried like 10 ways to achieve this but I am always getting NullReferenceException
    myPicture = ImageIO.read(getClass().getResourceAsStream("\\resources\\resize-cursor.png")));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

是否有一种工作方式只是链接我的应用程序中的png资源?

3 个答案:

答案 0 :(得分:1)

您是否尝试过getClass().getResourceAsStream("/resources/resize-cursor.png")

答案 1 :(得分:0)

用7zip打开jar,或者你可以在IDE中打开它。

然后搜索文件。我的猜测:/ resources是最顶层的目录。

myPicture = ImageIO.read(getClass().getResourceAsStream("/resize-cursor.png")));

对区分大小写的路径使用斜杠/

确保getClass()的类在同一个jar中。想想继承可能会做什么。 你也可以这样做:

myPicture = ImageIO.read(ClassInJar.class.getResourceAsStream("/resize-cursor.png")));

答案 2 :(得分:0)

我认为问题在于你使用的是2个斜杠而且它们是错误的。使用此“/”代替“\”或“\”。如果您将资源文件夹设置为类文件夹,也可能会有所帮助。

如果您想了解更多信息,请点击以下链接: 1. Oracle tutorial on BufferedImage 2. Documentation of BufferedImage

我喜欢加载图片的方法是创建一个类,使其更简单。

public class BufferedImageLoader {

    private BufferedImage image;

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

}

使用此加载“bufferedImage”。

BufferedImageLoader loader = new BufferedImageLoader();
image1 = loader.loadImages("/image1.png");
image2 = loader.loadImages("/image2.png");