如何为 ImageIcon 设置正确的路径?

How to set the correct path for an ImageIcon?

非常感谢您的帮助:

我目前的情况:我每次尝试加载时都遇到错误: jPaneljFramejInternalFrame任何其他 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 出现了新图标。

我希望这些细节可以帮助到别人。