Java 尝试从jar文件加载图标
我正在尝试从jar文件加载图标。我尝试从jar文件内的类以及jar文件外的类加载它 在jarfile外部-返回空异常Java 尝试从jar文件加载图标,java,jar,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() .ge
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的根:
URL url = ClassLoader.getSystemClassLoader().getResource("icons/mouse.png");
Icon icon = new ImageIcon(url);
跳过类加载器,改为以流的形式获取资源。如果不需要URL,可以直接将其转换为BuffereImage,如下所示。我将流和异常处理留作进一步练习
InputStream stream = LoadHTMLExample.class
.getResourceAsStream( "/icons/mouse.png" );
BufferedImage image = ImageIO.read( stream );
发问者需要一个URL,让我们回到其他人的建议。图像肯定在jar中,不是吗?我认为
getResource
获取相对于LoadHTMLExample.class
位置的资源。因此,您的jarfile
的结构应如下所示:
myjar.jar
|
|- ...
|- LoadHTMLExample.class
|- ...
\-- icons
|
\- mourse.png
另外,您可能是通过
getResourceAsStream
获取流,而不是获取URL
在运行时的类路径上是否有问题?我有一个带有png的jar,如果我不在类路径中包含它,我可以重新创建null。如果jar在那里,它们就会消失。final java.net.URL imageURL3=com.java.html.LoadHTMLExample.class.getResource(“icons/”
适用于以下目录结构
myjar.jar
|
|- ...
|-LoadHTMLExample.class
|- ...
--图标
|
-mourse.png
谢谢大家的帮助
Icon icon = new ImageIcon(ClassLoader.getSystemResource("icons/mouse.png"));
从getSystemResource()
的
从用于加载类的搜索路径中查找指定名称的资源
这将在jar文件中找到您的图标。名称在jar资源中区分大小写。还有一个开始/可能缺失。我也尝试过“icons”的变体,“/icons”“icons/”/icons/mouse.png”“icons/mouse.png”我遇到了同样的问题,我尝试了你提到的所有事情,你是如何解决的?谢谢或者,将路径从icons/mourse.png更改为/icons/mourse.png(注意开头的“/”)。考虑到所有其他因素,您肯定需要按照Peter的建议执行,因为加载“icons/mouse.png”意味着相对于类加载它。在你的罐子里,你的根上有图标,所以你必须用前斜杠作为前缀。我让它工作了!final java.net.URL imageURL3=com.java.html.LoadHTMLExample.class.getResource(“icons/”);这适用于上面的diagramClass.getResourceAsStream()只是委托给类加载器。这基本上是一样的。我需要URL,webrenderobject将使用资源位置来提取iconsalso尝试过你的方法,并且image keeps总是空的,所以任何一种方法都不起作用…什么是阻止读取jar文件?