默认情况下,Maven基于Standard Directory Layout检查资源文件夹。尽管最终的jar存在问题。
它最终将所有资源添加到src / main文件夹之外,这使我的JavaFX应用程序陷入困境。
Caused by: java.lang.NullPointerException: Input stream must not be null
at javafx.graphics/javafx.scene.image.Image.validateInputStream(Unknown Source)
at javafx.graphics/javafx.scene.image.Image.<init>(Unknown Source)
at main.java.com.goxr3plus.xr3player.application.tools.InfoTool.getImageFromResourcesFolder(InfoTool.java:734)
at main.java.com.goxr3plus.xr3player.application.Main.start(Main.java:324)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(Unknown Source)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$11(Unknown Source)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$9(Unknown Source)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(Unknown Source)
at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(Unknown Source)
at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(Unknown Source)
... 1 more
因为我正在从src / main / resources文件夹中加载图像,如:
class.getResourceAsStream("/main/resources/image/"+ imageName));
在最后一个jar中,images文件夹不在main文件夹下。我曾经将资源文件夹放在src
文件夹之外,而且一切似乎还不错,尽管我想遵循标准目录布局,所以我将其移动了。在一切正常之前,请使用:
class.getResourceAsStream("/image/"+ imageName));
这是当前的目录布局:
您的建议是什么?我应该以不同的方式加载图像吗? ....
class.getResourceAsStream("/main/resources/image/"+ imageName));
能以某种方式告诉Maven如何在最终jar上打包资源文件夹吗?
在多次重新启动并清理了项目和Maven Update Project之后……似乎是与Eclipse有关的问题……没关系,我会在这里留下这个问题,因为它将来可能对某人有用:)
答案 0 :(得分:1)
您的jar文件看起来像预期的标准布局。
如果您有src/main/resources/image/imageName.png
,它将显示在jar文件的/image/imageName.png
中(在屏幕快照中,您确实拥有该目录,因此看起来不错)。
您可以使用class.getResourceAsStream("/image/imageName.png")
加载它。