Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从JAR中访问图像_Java_Resources_Jar - Fatal编程技术网

Java 如何从JAR中访问图像

Java 如何从JAR中访问图像,java,resources,jar,Java,Resources,Jar,我知道以前有人问过这个问题(或类似的问题),但我还是不明白。我创建了一个内部结构如下的jar: JAR文件-配置-代码隐藏 ---命令行--gui ---资源 在resources文件夹中,我有一个我想用作图标的图像,但我不知道如何获取它。我试过了 ImageIcon icon = new ImageIcon(getClass().getResource("settings.png")); setIconImage(icon.getImage()); 但是当我试图访问图标的图像时,它抛出了一个

我知道以前有人问过这个问题(或类似的问题),但我还是不明白。我创建了一个内部结构如下的jar:

JAR文件-配置-代码隐藏

---命令行--gui

---资源

在resources文件夹中,我有一个我想用作图标的图像,但我不知道如何获取它。我试过了

ImageIcon icon = new ImageIcon(getClass().getResource("settings.png"));
setIconImage(icon.getImage());
但是当我试图访问图标的图像时,它抛出了一个
NullPointerException
。我试图分离命令的各个部分,并且
getResources(“mypic.png”)
返回null

有什么办法可以得到它吗?提前谢谢

getClass().getResource()将查找具有指定名称的资源,该名称从调用getClass()的类所在的包开始(相对于该包)

如果您希望从jar的根目录获取相对资源,那么您应该从以下目录执行getClass().getClassLoader().getResource()

在委派之前,使用以下算法从给定的资源名称构造绝对资源名称:

  • 如果名称以“/”开头(“\u002f”),则资源的绝对名称是名称中“/”后面的部分

  • 否则,绝对名称的形式如下: 修改的\u包\u名称/名称

其中,修改后的_package_name是此对象的包名,用“/”替换“.”(“\u002e”)

所以你可能想要

getResource("/settings.png")


或者类似的东西,取决于你的类路径,我相信。

如果你不想弄乱类路径,无论如何,有一种杀伤力过大但100%万无一失的方法,它基于以下两个事实:

  • 始终可以找到加载类的.jar所在的位置

  • jar文件只是一个zip文件,Java有一个默认API,允许读取zip文件

这有点过分,但它“只能工作[TM]”(而且由于Java提供的各种保证,它无法工作:您可以始终找到.jar的路径并始终从该.jar读取),并且当您想要创建一个唯一的.jar时,它很方便,可以在Windows、OS X、Linux等系统上按原样启动


我们在一个部署在数百个不同系统上的应用程序上使用了这种过度杀戮方法。

我刚刚尝试了它,但它仍然引发了空指针异常。我的资源文件夹不是src文件夹可能有问题吗?
getResource("/resources/settings.png")