Java 静态缓冲区从非静态镜像

Java 静态缓冲区从非静态镜像,java,static,jar,bufferedimage,non-static,Java,Static,Jar,Bufferedimage,Non Static,好的,这只是我在创建可执行JAR文件时遇到的一个大问题的一小部分。我需要移动我的图像,以便它们可以在另一个包中,以便它们可以在任何地方找到。我在加载我的BuffereImage时使用了: private static BufferedImage loadRefDigits() { try { return ImageIO.read(new File("src/package/references.png")); } catch (IOException e) {

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

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");
但这是一个非静态的方法,我一直在试图找出如何使用这个方法获取BuffereImage对象


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

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

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

我相信这将为你指明正确的方向

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);
    }
}

为什么该方法是静态的,在什么时候调用该代码?为了更快地获得更好的帮助,请发布一个。