如何确保我的javaFX应用程序正在从相对路径加载图像?

如何确保我的javaFX应用程序正在从相对路径加载图像?,java,image,javafx,Java,Image,Javafx,尽管在java image类中使用了我认为正确的文件路径,但我无法在游戏中加载图像 我有多个可用的文件路径和扩展名,并且已经搞乱了文件位置,当前的文件结构是: --src -- main.java -- images -- the image 我希望它会在我启动游戏时出现,但它意外地没有出现,游戏也没有崩溃。非常感谢您的帮助。首先,图像应位于src/main/resources文件夹下。然后您应该将它们作为资源加载 新图像(this.getClass().getR

尽管在java image类中使用了我认为正确的文件路径,但我无法在游戏中加载图像

我有多个可用的文件路径和扩展名,并且已经搞乱了文件位置,当前的文件结构是:

 --src

   -- main.java

   -- images

     -- the image

我希望它会在我启动游戏时出现,但它意外地没有出现,游戏也没有崩溃。非常感谢您的帮助。

首先,图像应位于
src/main/resources
文件夹下。然后您应该将它们作为资源加载

新图像(this.getClass().getResource(“images/img.png”).toExternalForm())

新建图像(“images/img.png”)
-API假定图像位于资源路径中

路径应该与用于调用上的
getResource
的类相关


从文件加载它们将在组装应用程序后停止,这将添加资源作为jar的一部分。

Image img=ImageIO.read(新文件(“images/img.png”);它应该work@arifng它无法正确转换,表示无法从BuffereImage转换为Image classIs-ImageIO.read(getClass().getClassLoader()).getResourceAsStream(“images/img.png”);@arifng相同的错误请检查此链接:getResource为您提供了正确的URL,但随后您使用了该图像:新图像(getClass().getResource(“resources/icon.gif”));我还更新了answer@NeilEstradaJavaFX类没有接受
URL
的构造函数-它希望URL是
String
形式。只需调用
toString()
toExternalForm()
,就可以从
getResource(…)
获得
URL
。也就是说,您应该能够简单地传递
“images/img.png”
因为
Image
将无模式URL解释为相对于类路径(如果使用Jigsaw模块,这可能会稍微复杂一些)。对于应用程序来说,资源可能是外部的,但更常见的是,静态资源是打包在一起的。这意味着它们是jar的最终形式的一部分,这和直接从文件加载它们不同。所以,即使它可以在IDE中工作,但在部署
src/main/resources后也不会工作
是一种Maven约定。如果使用不同的工具进行构建,则图像可以位于不同的位置,只要构建从那里打包它们,或者在其运行时类路径中包含它们的位置。(我相信您知道这一点,但我添加它是为了Neil和其他读者的利益。)现在,我认为Java世界中的大多数工具都使用Maven约定
Image earth = new Image("file:projectName/images/img.png");