Java 图像加载实际上是如何工作的?

Java 图像加载实际上是如何工作的?,java,netbeans,Java,Netbeans,我正在使用NetBeans并将图像加载到我的程序中,到目前为止,我一直将所有图像存储在src/images/中,这很好。但是我想把我所有的包名都大写,所以我对它们进行了重构,使它们都大写。于是“图像”变成了“图像”。我更改了所有的文件路径字符串以反映这一点,但当我下次运行我的程序时,所有图像都不会加载。我在项目的构建部分找到了另一个名为images的文件夹,其中有一些我需要的图像,因此我将src image文件夹中的所有内容复制到/build/classes/images文件夹中,然后奇迹般地重

我正在使用NetBeans并将图像加载到我的程序中,到目前为止,我一直将所有图像存储在src/images/中,这很好。但是我想把我所有的包名都大写,所以我对它们进行了重构,使它们都大写。于是“图像”变成了“图像”。我更改了所有的文件路径字符串以反映这一点,但当我下次运行我的程序时,所有图像都不会加载。我在项目的构建部分找到了另一个名为images的文件夹,其中有一些我需要的图像,因此我将src image文件夹中的所有内容复制到/build/classes/images文件夹中,然后奇迹般地重新开始工作。到目前为止,我一直将所有图像放在src/images/部分

那么实际发生了什么?我是否需要开始在/build/classes/images中或在旧位置保存程序所需的所有新图像?图像加载代码现在决定在一个完全不同的地方查看,这是怎么回事?为什么图像文件夹有两个版本?这是NetBeans生成的一些奇怪的东西吗?

ImageIO.read(myClass.class.getResource("/images/myClassImg.png");

资源文件可以与jar中的所有.class文件打包在一起。然后它就不是文件系统中的文件了。因此,路径名区分大小写,并使用“/”作为路径分隔符。通常,资源URL区分大小写

上面应该是“/Images/myClassImg.png”

但是,使用大写的包名与非常普遍的约定相反。

函数应该可以工作。您还可以使用
getAbsolutePath()


确保清理并构建项目,以确保更改反映在已编译代码和netbeans缓存中
Image I = ImageIO.read(getClass().getResource("/images/myClassImg.png"));