【问题标题】:URL resource = this.getClass().getResource("file-name") is nullURL 资源 = this.getClass().getResource("file-name") 为空
【发布时间】:2021-01-22 17:21:56
【问题描述】:

完全不解。 我愿意:

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

并且 URL 的计算结果为 null。 “eye-visible.png”是与我的类在同一个包中的文件,即“Controller.java”:

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

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

这也返回 null。

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

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

【问题讨论】:

  • 您的项目是否设置为将非.java 源文件复制到.class 文件所在的位置?
  • 我只是使用 NetBeans 的默认值...让我检查一下...

标签: java resource-loading


【解决方案1】:

感谢@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>

【讨论】:

    猜你喜欢
    • 2011-04-17
    • 1970-01-01
    • 2015-04-13
    • 1970-01-01
    • 2013-06-06
    • 2015-06-03
    • 1970-01-01
    • 2011-02-05
    • 2019-10-23
    相关资源
    最近更新 更多