静态来自非静态的BufferedImage

时间:2013-04-14 15:00:34

标签: java static jar bufferedimage non-static

好的,这是我在创建可执行JAR文件时尝试的一个大问题的一小部分。我需要移动我的图像,以便它们可以放在另一个包中,以便可以在任何地方找到它们。我正在使用以下方式加载我的BufferedImage:

private static BufferedImage loadRefDigits() {
    try {
        return ImageIO.read(new File("src/package/references.png"));

    } catch (IOException e) {
        throw new RuntimeException(" Error reading reference digits", e);
    }
}

但是,这个图像在jar中找不到,所以我试图使用:

URL imageURL = this.getClass().getResource("/Images/references.png");

但这是一个非静态方法,我不知道如何使用这种方法弄清楚如何获取BufferedImage对象。

任何帮助都非常有用,谢谢!

2 个答案:

答案 0 :(得分:1)

只需对jar文件中的任何类使用静态引用:

URL url = SomeClass.class.getResource("/Images/references.png");

答案 1 :(得分:0)

我相信这会为您设定正确的方向。

public static BufferedImage getClasspathImage(String name) {
    Objects.requireNonNull(name);

    URL url = Images.class.getClassLoader().getResource(name);
    if (url == null) {
        String fmt = "cannot find resource [%s]";
        throw new IllegalStateException(String.format(fmt, name));
    }

    try (InputStream stream = url.openStream()) {
        return ImageIO.read(stream);
    }
    catch (IOException e) {
        String fmt = "cannot read resource [%s] at [%s]";
        String err = String.format(fmt, name, url);
        throw new IllegalStateException(err, e);
    }
}