【问题标题】:Trying to load icon from jar file试图从 jar 文件中加载图标
【发布时间】:2019-05-22 18:43:04
【问题描述】:

我正在尝试从 jar 文件加载图标。我都尝试从 jar 文件中的类以及 jar 文件之外的类中加载它。

在 jarfile 之外 - 返回一个空异常

java.net.URL imageURL = LoadHTMLExample.class.getClassLoader()
    .getResource("icons/mouse.png");

在 LoadHTMLExample 中的 jar 文件的一侧

java.net.URL imageURL = this.getClass().getClassLoader()
    .getResource("icons/mouse.png");

得到同样的错误。

我也尝试过 "icons", "/icons" "icons/" "/icons/mouse.png" "icons/mouse.png"

似乎没有任何想法

图标在jar文件中

jar
 --icons --- {all the images}

 --com.blah.blah

【问题讨论】:

  • 名称在 jar 资源中区分大小写。也是一个开始/可能缺少。
  • 我也尝试过 "icons"、"/icons" "icons/" "/icons/mouse.png" "icons/mouse.png" 的变体
  • 我遇到了同样的问题,我已经尝试了你提到的所有相同的事情,你是如何解决的?谢谢!

标签: java jar


【解决方案1】:

我一直使用系统类加载器,它的路径是相对于 JAR 的根目录的:

URL url = ClassLoader.getSystemClassLoader().getResource("icons/mouse.png");
Icon icon = new ImageIcon(url);

【讨论】:

    【解决方案2】:

    跳过类加载器,而是以流的形式获取资源。如果您不需要 URL,您可以像这样直接将它们转换为 BufferedImages。我将流和异常处理留作进一步的练习。

    InputStream stream = LoadHTMLExample.class
        .getResourceAsStream( "/icons/mouse.png" );
    BufferedImage image = ImageIO.read( stream );
    

    发问者需要将我们带回到其他人的建议的 URL。图片肯定在罐子里不是吗?

    【讨论】:

    • Class.getResourceAsStream() 只是委托给 ClassLoader。本质上是一样的。
    • 我需要 URL,webrenderobject 将使用资源位置来拉图标
    • 也试过你的方法,图像保留总是为空,所以任何一种方法都不起作用……是什么阻止了读取 jar 文件?
    【解决方案3】:

    我认为getResource 获取相对于LoadHTMLExample.class 位置的资源。因此,您的jarfile 应按以下方式构建:

    myjar.jar
     |
     |- ...
     |- LoadHTMLExample.class
     |- ...
     \-- icons
          |
          \- mourse.png
    

    另外,您可能通过getResourceAsStream 获得流而不是获得URL

    【讨论】:

    • 或者,将路径从 icons/mourse.png 更改为 /icons/mourse.png(注意开头的“/”) .
    • 所有其他考虑,你肯定需要按照彼得的建议去做,因为加载“icons/mouse.png”意味着相对于类加载它。在您的 JAR 中,您的图标位于根目录之外,因此您必须使用前斜线作为前缀。
    • 我让它工作了! final java.net.URL imageURL3 = com.java.html.LoadHTMLExample.class.getResource("icons/");适用于上图
    【解决方案4】:

    您的运行时的类路径中是否有问题的 jar?我有一个带有 PNG 的 jar,如果我不将它包含在类路径中,我可以重新创建空值。如果罐子在那里,它们就会消失。

    【讨论】:

      【解决方案5】:

      final java.net.URL imageURL3 = com.java.html.LoadHTMLExample.class.getResource("icons/");

      适用于以下目录结构

      myjar.jar | |- ... |- 加载HTMLExample.class |- ... -- 图标 | - mourse.png

      感谢大家的帮助

      【讨论】:

        【解决方案6】:
        Icon icon = new ImageIcon(ClassLoader.getSystemResource("icons/mouse.png"));
        

        来自getSystemResource()JavaDoc

        用于加载类的搜索路径中查找指定名称的资源...

        这甚至可以在 jar 文件中找到您的图标。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-08-06
          • 2013-06-15
          • 2013-09-04
          • 1970-01-01
          • 2023-04-11
          • 1970-01-01
          相关资源
          最近更新 更多