试图从jar文件加载图标

时间:2009-07-15 18:23:06

标签: java jar

我正在尝试从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

6 个答案:

答案 0 :(得分:6)

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

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

提问者需要一个URL,它将我们带回给其他人的建议。这些图像肯定在罐子里不是吗?

答案 1 :(得分:5)

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

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

答案 2 :(得分:1)

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

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

此外,您可能正在通过getResourceAsStream而不是获取URL

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

适用于以下目录结构

myjar.jar  |  | - ......  | - LoadHTMLExample.class  | - ......   - 图标       |        - mourse.png

感谢大家的帮助

答案 5 :(得分:0)

Icon icon = new ImageIcon(ClassLoader.getSystemResource("icons/mouse.png"));

来自getSystemResource()的{​​{3}}:

  

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

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