【问题标题】:Scala getClass.getResource() returning nullScala getClass.getResource() 返回 null
【发布时间】:2012-08-21 10:45:31
【问题描述】:

我有这个代码:

val url: URL = getClass.getResource("com/mysite/main/test.fxml")

它总是返回null(或Unit)。我的项目中只有两个文件:

MyProj/src/com/mysite/main/Test.scala
MyProj/src/com/mysite/main/test.fxml

当我运行Test.scala 时,url 的值始终为空。

我刚刚尝试重建项目,我正在使用 IntelliJ IDEA。我在这里做错了什么?

【问题讨论】:

标签: java scala intellij-idea


【解决方案1】:

您有三个选择:

  • 利用当前包的相对路径(Test.class 所在的位置):

    getClass.getResource("test.fxml")
    
  • 你可以使用绝对路径:

    getClass.getResource("/com/mysite/main/test.fxml")
    
  • 或者通过ClassLoader加载(注意它总是从root开始):

    getClass.getClassLoader.getResource("com/mysite/main/test.fxml")
    

在 IntelliJ IDEA 中,确保您已将 ;?*.fxml 添加到:

Settings(Mac 上为Preferences)| Compiler | 资源模式

【讨论】:

  • 不,同样的事情,它返回 null。我已经用谷歌搜索并尝试了这些方法,但它们都不起作用。
  • @rFactor 尝试刷新项目。
  • @rFactor:所以它必须与您的 IDE 相关。以上所有工作,至少在我使用 IntelliJ 和 maven 项目结构时是这样。你也确定Test.scala 有正确的包声明吗?目录不够用。
  • @TomaszNurkiewicz 是的,该文件以package com.mysite.main 开头,一切运行正常,除了它没有找到该文件并且该文件确实存在。什么是“刷新”?我按了“同步”和“重建项目”。
【解决方案2】:

可能它没有从 src/ 目录复制到 bin/ 目录? 重新编译时会发生这种情况,但如果在程序编译完成后将其放入 src/ 目录,IDE 将不知道。

【讨论】:

  • 这解决了我的问题。我只需要 sbt clean compile 然后它就可以看到资源。感谢您阻止我再浪费时间!
【解决方案3】:

迟到的答案,但我也遇到了同样的问题。根本原因是我的 settings.gradle 中的 rootProject.name 条目不正确。一旦我修复了这个问题,清理并重建了我的资源,就可以使用 getClass().getResource() 加载。希望对某人有所帮助。

【讨论】:

    【解决方案4】:

    如果还是不行,可以试试ClassLoader

    ClassLoader.getSystemResource("filename").getPath
    

    文件名应该在同一目录层

    【讨论】:

      猜你喜欢
      • 2019-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多