当前位置: 首页 > 知识库问答 >
问题:

在JAR中使用loader.setLocation(getClass(). getClassLoader()加载FXML

樊胜
2023-03-14

我正在尝试加载我的 *.fxml 文件,这些文件位于不同的包中,打包在 JAR 中。

我的文件夹结构:(所有文件夹都在类路径中)

- src/main/java: 
    - com.test.controller
        - Application.java
    - com.test.view
        - Main.fxml
- src/main/test: contains unit tests
- src/main/resources: contains images

正如这里提到的,我使用以下语句来加载FXML文件。(没有前导斜杠“/”)该方法在Application.java文件中调用。

FXMLLoader loader = new FXMLLoader(getClass().getClassLoader().getResource("com/test/Main.fxml")

如果我在eclipse中运行这个项目,这工作得很好,但是如果我执行JAR(它是用Gradle创建的),就会出现< code > Java . lang . illegalstateexception:Location not set 错误

如果我解压缩JAR文件,我可以看到<code>Main。fxml位于/com/test/,因此该文件确实存在。

我尝试了在不同的包中访问FXML文件的几种方法,但都没有效果。有人知道在这里做什么吗?

我宁愿不将FXML文件移动到资源文件夹(如此处所述,因为我假设应该可以访问它们现在所在的文件。

共有1个答案

墨安阳
2023-03-14

将其添加到您的 build.gradle(如果您使用 Gradle 作为构建工具)

sourceSets {
    main {
        resources {
            srcDirs = ["src/main/java", "src/main/resources"]
        }
    }
}

然后按如下方式加载资源:

选项 1:相对于当前类文件 (MyClass):

MyClass.class.getResource("../view/Main.fxml")

选项2:相对于类路径根

URL configUrl = MyClass.class.getClassLoader().getResource("config.xml");
File myConfigFile = new File(configUrl.toURI());`
 类似资料:
  • 问题内容: 我有一些调用的代码。 不过,这将返回null。 当我从命令行而不是从Eclipse启动相同的代码时,它将返回一个类加载器。 我可以破解代码来做到这一点… 两者都被编译并使用相同的JVM运行。(我确定99.99%)。 任何人都知道为什么第一个会为类加载器返回null? 编辑: 我的问题是:“没有人知道为什么同一类通过Eclipse启动时会返回null,而从命令行加载时会返回类加载器。”

  • 问题内容: 我正在尝试存储对应用程序属性所做的更改。该文件位于包中,与包含我的UI和模型的包不同。 我使用以下方法打开了包装: 是否有与之等效的功能,允许我将对Properties类的更改持久保存在同一.Properties文件中? 问题答案: 听起来您想存储用户首选项。考虑为此使用Java Preferences API 。

  • 我遵循了使用加载资源文件的方式。代码片段在这里: 我已经在eclipse中用层次结构对其进行了配置(在source下有一个名为SwingDemo的文件夹。在SwingDemo中有我的java文件和资源文件)。。。 src公司 当我在eclipse上运行它时,一切都运行正常。但是一旦我尝试从cmd行运行应用程序,就会发生空指针异常。 命令行部署层次结构如下: 文件夹:

  • 我将Jetty(8和9)与LZ4压缩一起使用,我想使用LZ4的本机实现,它是C库的本机绑定。为了实现这一点,LZ4类应该用系统类加载器加载。 所以我的问题是,如何用Jetty中的系统类加载器加载一个外部jar。 将lib放入$jetty。home/lib/ext没有帮助,因为它是用扩展类加载器而不是系统加载器加载的。

  • 我有一个插件文件夹,其中包含一些JAR,我想加载它们的所有*。班我看到很多关于或的答案。然而,我想用java来实现这一点。nio包而不是io。 我能做的是: 使用 我还不能做的事: 使用NIO在JAR/ZIP中列出文件 最终,我想要: 在几个JAR中遍历每个类,并加载它们以寻找一种插件系统的注释 我应该补充一点,我不需要一个使用像番石榴或阿帕奇这样的应用编程接口的工作解决方案,但我只想知道它是如何