【问题标题】:Why won't my BufferedImage show in the .jar file?为什么我的 BufferedImage 不会显示在 .jar 文件中?
【发布时间】:2012-10-02 13:55:03
【问题描述】:

好的,所以我创建了一个缓冲图像以显示在 JLabel 上。当我显示文件位置时,它需要一个 src/ 在我要访问的文件夹前面,否则会出现错误,我将看不到缓冲图像...我知道如果我把 'src/'在 resImg 前面,BufferedImage 不会显示在 IDE 之外。任何人都可以帮忙吗? 这是在 IDE 内部工作的代码。从 .jar 文件外部运行时,图像不显示。

static File f = new File("src/resImg/banner.png");

try {
        banner = ImageIO.read(f);
        picLabel = new JLabel(new ImageIcon(banner));
        LabelPanel.add(picLabel);
    } catch (IOException ex) {
        Logger.getLogger(GameStart.class.getName()).log(Level.SEVERE, null, ex);
    }

【问题讨论】:

  • 您只能引用文件系统上的File。对于那些在罐子里的人,你应该把它们当作一种资源。

标签: java jar jlabel bufferedimage


【解决方案1】:

当资源在 jar 文件中时,它不是本地文件系统上的文件。你应该使用

URL imageSource = getClass().getResource("/resImg/banner.png");
if (imageSource == null) {
    // Handle the resource being missing
}
picLabel = new JLabel(new ImageIcon(imageSource));

在这里,您从类加载器中获取资源,这显然可以访问您的 jar 文件中的文件。

【讨论】:

  • 如果我在静态方法中怎么办?我将如何进行?就是说 getClass() 是一个非静态方法。
【解决方案2】:

如果您想从 jar 中获取图像,请像这样使用 smth:

URL imageurl = getClass().getResource("/images/imagename");

【讨论】:

    【解决方案3】:

    您不能为 JAR 文件中的资源创建 File 对象。改用这个。

    URL imgurl = this.getClass().getClassLoader().getResource("resImg/banner.png");
    picLabel - new JLabel(new ImageIcon(imgurl));
    

    希望这会有所帮助。

    【讨论】:

      【解决方案4】:

      你要找到一个父目录,相对路径可以从like开始

      • 工作区目录
      • 进程启动的目录

      相对路径是“realtiv”从java进程开始的地方,所以路径可以不时改变。

      如果图片放在罐子里,可以使用

      getClass().getResource("relativ jar path")
      

      用于查找图像。罐子自己知道,它放在哪里。

      【讨论】:

        【解决方案5】:

        最可能的原因是您的图像未打包在 jar 文件中(使用 jar / zip 工具验证这一点)。

        如果图像存在但不显示,那是因为您试图从相对于工作目录的文件系统中读取它(当然它不存在)

        因此,正确的解决方案是从类路径中读取图像:

        Thread.currentThread().getContextClassloader().getResourceAsStream(... path to your image relative to jar root ---)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-07-12
          • 1970-01-01
          • 2012-03-08
          • 2015-05-31
          • 1970-01-01
          • 2017-02-03
          • 2018-06-08
          • 2013-03-18
          相关资源
          最近更新 更多