【问题标题】:static BufferedImage from non-static来自非静态的静态 BufferedImage
【发布时间】:2013-04-14 15:00:34
【问题描述】:

好的,这是我在创建可执行 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 对象。

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

【问题讨论】:

  • 为什么该方法是静态的,在什么时候调用该代码?为了尽快获得更好的帮助,请发帖SSCCE

标签: java static jar bufferedimage non-static


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    我相信这会让你朝着正确的方向前进。

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

    【讨论】:

      猜你喜欢
      • 2014-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多