Java 如何从JAR中访问图像
我知道以前有人问过这个问题(或类似的问题),但我还是不明白。我创建了一个内部结构如下的jar: JAR文件-配置-代码隐藏 ---命令行--gui ---资源 在resources文件夹中,我有一个我想用作图标的图像,但我不知道如何获取它。我试过了Java 如何从JAR中访问图像,java,resources,jar,Java,Resources,Jar,我知道以前有人问过这个问题(或类似的问题),但我还是不明白。我创建了一个内部结构如下的jar: JAR文件-配置-代码隐藏 ---命令行--gui ---资源 在resources文件夹中,我有一个我想用作图标的图像,但我不知道如何获取它。我试过了 ImageIcon icon = new ImageIcon(getClass().getResource("settings.png")); setIconImage(icon.getImage()); 但是当我试图访问图标的图像时,它抛出了一个
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名称/名称
getResource("/settings.png")
或
或者类似的东西,取决于你的类路径,我相信。如果你不想弄乱类路径,无论如何,有一种杀伤力过大但100%万无一失的方法,它基于以下两个事实:
- 始终可以找到加载类的.jar所在的位置
- jar文件只是一个zip文件,Java有一个默认API,允许读取zip文件
我们在一个部署在数百个不同系统上的应用程序上使用了这种过度杀戮方法。我刚刚尝试了它,但它仍然引发了空指针异常。我的资源文件夹不是src文件夹可能有问题吗?
getResource("/resources/settings.png")