如何为 ImageIcon 设置正确的路径?
How to set the correct path for an ImageIcon?
非常感谢您的帮助:
我目前的情况:我每次尝试加载时都遇到错误:
jPanel、jFrame、jInternalFrame 或 任何其他 java 组件 ( java.swing.组件)。如果我用像这样的 ImageIcon 集( 如下所述)加载我的面板,我会得到一个 nullpointerexeption,因为它找不到带有字符串中提供的图像路径的图像。
注:我的IDE是Oracle的JDeveloper 11G。
private ImageIcon image1 = new ImageIcon(getClass().getResource(path));
格式 1:
"..\src\Image\add.png" , ".\src\Image\add.png" ,"\src\Image\add.png"
(我意识到这一点:["..\\src\\Image\\add.png"] 几乎适用于我大学里的每个人,如果我 运行 任何不是我自己开发的项目都可以正常工作,否则就会失败。)
格式 2:
"..\Image\add.png", ".\Image\add.png", "\Image\add.png"
格式 3:
"..\add.png", ".\add.png", "\add.png"
格式 4:
"../src/Image/add.png" , "./src/Image/add.png" ,"/src/Image/add.png"
格式 5:
"../Image/add.png" , "./Image/add.png" ,"/Image/add.png"
格式 6:
"../add.png" , "./add.png" ,"/add.png"
提前感谢您的帮助
ImageIcon 不是你的问题。关键是 getClass().getResource()
它从与 java 相同的源加载文件也读取 class 文件。
换句话说:如果您的 class 路径是 -cp .
或任何其他目录,getResource()
也会从那里加载文件,相对于给定目录(“.”是当前目录)
如果您的class路径是一个.jar
文件,路径是在里面这个罐子里查找的,而不是其他地方。
现在给定你的 class 路径是 /a/bin 而你的 class 是 c.d.E
:
/
是根。不是文件系统的根,而是 class 路径的根。在此示例中,这是 /a/bin/
.
.
表示class的位置。在示例中,这是 /a/bin/c/d/
..
表示退一步,也就是/a/bin/c/
。这是有效的,因为 Java 向文件系统询问路径 /a/bin/c/d/../
.
如果路径是 .jar 文件并且您的 class 是 c.d.E
:
/
是 jar 的根。
.
表示class的位置。在示例中,这是 jar 内的 c/d/
..
未记录
如果您使用 \
或 /
作为分隔符在 Windows 上无关紧要。在所有其他情况下,您必须使用 /
.
现在,我希望我没有包含错误...
我刚刚找到了 ImageIcon 的正确路径,谢谢大家的评论。非常感谢。
简答:
基于我之前描述的场景 Sting 中正确的路径必须是 "/Image/add.png" 或 "/package_folder/file.png "
图像文件 必须放在 中 App_Folder\Project\classes\package_name 但也应该显示在 "App_Folder\Project\src\package_name"(如果添加任何新图像,可以替换文件夹)
截图
AppFolder and Project 为了更好地理解
在这种情况下总结代码是:
ImageIcon image1 = new ImageIcon(getClass().getResource("/Image/add.png"));
据我了解,这是我的拙见:
JDeveloper 在包和 classes 的位置查找图像文件。
这个是 App_Folder\Project\classes\package 名字。如果我们仔细观察结构是在class中寻找资源,这可能就足以"get it"
但如果像我这样的其他人需要更多提示,就可以了。
我发现我的错误是这个:
似乎 JDeveloper 有两个存储库而不是一个,或者它是包和 classes 的一种备份。
由于 "source" 的缩写可以是 src,我想,如果我将文件放在 src(源)中的包中,并且基于 Javadoc 的路径是“/Image_Package/ImageFile.(type )“ 是正确的。为什么我遇到这个 NullPointerException?
我今天在大学里和我的老师核实了同样的细节并且它起作用了,但是回到家里我遇到了同样的错误,我开始查看其他文件以检查关于 "class" 和"resource" 所以我发现还有另一个文件夹包含相同的包,但这个文件夹不是 "updated"(如果我们这样描述)和我放在 src 中的新图像。然后我粘贴新图像,重新打开 Developer 和我 运行 脚本...最后 Jframe 出现了新图标。
我希望这些细节可以帮助到别人。
非常感谢您的帮助:
我目前的情况:我每次尝试加载时都遇到错误: jPanel、jFrame、jInternalFrame 或 任何其他 java 组件 ( java.swing.组件)。如果我用像这样的 ImageIcon 集( 如下所述)加载我的面板,我会得到一个 nullpointerexeption,因为它找不到带有字符串中提供的图像路径的图像。
注:我的IDE是Oracle的JDeveloper 11G。
private ImageIcon image1 = new ImageIcon(getClass().getResource(path));
格式 1:
"..\src\Image\add.png" , ".\src\Image\add.png" ,"\src\Image\add.png"
(我意识到这一点:["..\\src\\Image\\add.png"] 几乎适用于我大学里的每个人,如果我 运行 任何不是我自己开发的项目都可以正常工作,否则就会失败。)
格式 2:
"..\Image\add.png", ".\Image\add.png", "\Image\add.png"
格式 3:
"..\add.png", ".\add.png", "\add.png"
格式 4:
"../src/Image/add.png" , "./src/Image/add.png" ,"/src/Image/add.png"
格式 5:
"../Image/add.png" , "./Image/add.png" ,"/Image/add.png"
格式 6:
"../add.png" , "./add.png" ,"/add.png"
提前感谢您的帮助
ImageIcon 不是你的问题。关键是 getClass().getResource()
它从与 java 相同的源加载文件也读取 class 文件。
换句话说:如果您的 class 路径是 -cp .
或任何其他目录,getResource()
也会从那里加载文件,相对于给定目录(“.”是当前目录)
如果您的class路径是一个.jar
文件,路径是在里面这个罐子里查找的,而不是其他地方。
现在给定你的 class 路径是 /a/bin 而你的 class 是 c.d.E
:
/
是根。不是文件系统的根,而是 class 路径的根。在此示例中,这是/a/bin/
..
表示class的位置。在示例中,这是/a/bin/c/d/
..
表示退一步,也就是/a/bin/c/
。这是有效的,因为 Java 向文件系统询问路径/a/bin/c/d/../
.
如果路径是 .jar 文件并且您的 class 是 c.d.E
:
/
是 jar 的根。.
表示class的位置。在示例中,这是 jar 内的 ..
未记录
c/d/
如果您使用 \
或 /
作为分隔符在 Windows 上无关紧要。在所有其他情况下,您必须使用 /
.
现在,我希望我没有包含错误...
我刚刚找到了 ImageIcon 的正确路径,谢谢大家的评论。非常感谢。
简答:
基于我之前描述的场景 Sting 中正确的路径必须是 "/Image/add.png" 或 "/package_folder/file.png "
图像文件 必须放在 中 App_Folder\Project\classes\package_name 但也应该显示在 "App_Folder\Project\src\package_name"(如果添加任何新图像,可以替换文件夹)
截图 AppFolder and Project 为了更好地理解
在这种情况下总结代码是:
ImageIcon image1 = new ImageIcon(getClass().getResource("/Image/add.png"));
据我了解,这是我的拙见:
JDeveloper 在包和 classes 的位置查找图像文件。 这个是 App_Folder\Project\classes\package 名字。如果我们仔细观察结构是在class中寻找资源,这可能就足以"get it" 但如果像我这样的其他人需要更多提示,就可以了。
我发现我的错误是这个: 似乎 JDeveloper 有两个存储库而不是一个,或者它是包和 classes 的一种备份。 由于 "source" 的缩写可以是 src,我想,如果我将文件放在 src(源)中的包中,并且基于 Javadoc 的路径是“/Image_Package/ImageFile.(type )“ 是正确的。为什么我遇到这个 NullPointerException?
我今天在大学里和我的老师核实了同样的细节并且它起作用了,但是回到家里我遇到了同样的错误,我开始查看其他文件以检查关于 "class" 和"resource" 所以我发现还有另一个文件夹包含相同的包,但这个文件夹不是 "updated"(如果我们这样描述)和我放在 src 中的新图像。然后我粘贴新图像,重新打开 Developer 和我 运行 脚本...最后 Jframe 出现了新图标。
我希望这些细节可以帮助到别人。