URL 资源 = this.getClass().getResource("file-name") 为空

URL resource = this.getClass().getResource("file-name") is null

百思不得其解。 我愿意:

URL resource = this.getClass().getResource("eye-visible.png");

并且 URL 的计算结果为空。 "eye-visible.png"是和我的class在同一个包里的一个文件,就是"Controller.java":

我也试过了(其实我是从这个开始的):

InputStream inputStream = Controller.class.getResourceAsStream("eye-visible.png");

和这个 returns 也为 null。

真的卡住了 - 有什么线索吗??

这是一个模块化项目,我运行在JDK14上。我将 NetBeans 用于 IDE。上面几行是在 JavaFX 应用程序的启动方法中。我在一个只有主 class 的新 java 项目中使用上面的行重现了相同的空输出:相同的效果。

感谢 @Andreas

的评论

-> 非 .java 文件未复制到 .class 文件的位置(只是被忽略)。

这是使用 Maven 构建的结果,默认情况下具有此行为(只有 src/main/resources 中的文件将被复制到单独的位置)。

修复方法是将此片段添加到 POM.xml(根据 this answer 另一个问题):

<build>
    <resources>
        <resource>
            <directory>src/main/java</directory>
            <excludes>
                <exclude>**/*.java</exclude>
            </excludes>
        </resource>
    </resources>
    <testResources>
        <testResource>
            <directory>src/test/java</directory>
            <excludes>
                <exclude>**/*.java</exclude>
            </excludes>
        </testResource>
    </testResources>
</build>