Java 最终jar中src/main下的Maven包资源文件夹

Java 最终jar中src/main下的Maven包资源文件夹,java,maven,javafx,maven-resources-plugin,Java,Maven,Javafx,Maven Resources Plugin,默认情况下,Maven根据检查资源文件夹。尽管最后一个罐子有问题 最后,它添加了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 j

默认情况下,Maven根据检查资源文件夹。尽管最后一个罐子有问题

最后,它添加了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
在最后一个jar中,images文件夹不在主文件夹下。我以前把resources文件夹放在
src
文件夹外,一切看起来都很好,不过我想遵循标准的目录布局,所以我把它移动了。在一切正常运行之前,请使用:

class.getResourceAsStream("/image/"+ imageName));
这是当前的目录布局:


你有什么建议?我应该以不同的方式加载图像吗

现在只有该代码可以工作
class.getResourceAsStream(“/main/resources/image/”+imageName))

可以告诉Maven如何在最终的jar上打包resources文件夹吗



在多次重新启动并清理项目和Maven更新项目之后。。。似乎是日食相关的问题。。。没关系,我将把这个问题留在这里,因为它可能对将来的人有用:)

您的jar文件看起来像预期的标准布局

如果您有
src/main/resources/image/imageName.png
,它将显示在jar文件的
/image/imageName.png
中(在屏幕截图中,您确实有该目录,因此看起来不错)


您可以使用
class.getResourceAsStream(“/image/imageName.png”)

加载它,我不知道Jar中的
main
文件夹来自哪里。尝试一个
mvn clean
,可能是以前实验的遗留物?代码在
src/main/java/com/goxr3plus/xr3player
下,资源在
src/main/resources
下。。。正在尝试
src/main/resources/image/…
我得到了
NullPointerException:输入流不能为null
这太奇怪了。。。它应该可以工作,但它不能…当我在src之外有resources文件夹时,它在
/image/…
中工作得很好。注意,在标准布局中,源文件应该在
src/main/java
下。看起来它们当前位于
src/main
下。此外,在运行时,类路径的根将是
src/main/java
src/main/resources
。所有资源路径都应该相对于
src/main/resources
。因此,如果您有一个位于
src/main/resources/foo/bar/File.txt的资源,那么绝对路径将是
getResource(“/foo/bar/File.txt”)
@Slaw代码位于
src/main/java/com/goxr3plus/xr3player
下,而资源位于
src/main/resources
下,Eclipse显示了它。。。以令人困惑的方式。我在windows资源管理器中进行了检查:)您的Eclipse源路径设置不正确。看起来根目录是
src
,而它应该是
src/main/java
(和
src/main/resources
作为额外的运行时类路径)。尝试从Maven定义重新导入项目。Maven将自动将
/src/main/resources
中的所有内容复制到jar文件中。Maven将自动将
src/main/resources/sound
复制到jar文件中的
/sound
。这是默认的目录布局。
class.getResourceAsStream("/image/"+ imageName));