我刚刚完成了我的第一个 Java 项目,但是我似乎无法正确构建它。它将加载整个计算器运行的初始 fxml 文件,但是当我尝试在假期/休息菜单中添加假期/休息时,应该显示一个对话框,以便用户可以填写信息,但我一直没有得到一个位置在cmd中运行jar文件时设置错误。当我在 intellij 中启动它但不在 jar 中时,这一切都有效。
这就是我设置文件的方式。我在 FinishedCalCulator 项目中创建了一个资源目录,并将其标记为资源根
这就是我将 FXML 文件的位置设置到加载器中的方式。当我在 Intellij 中运行它但不在 jar 文件中时,这有效。
我环顾四周,发现一些帖子谈论将所有 fxml 文件放入资源文件中,我这样做并使其在 Intellij 中再次工作,但是当我尝试添加它们时,它仍然不会显示对话框窗格。我不确定我在这里做错了什么。我不认为我完全理解我做错了什么。任何帮助都会很棒。
扩展我的评论...
在您的代码中,您正在调用getResource("/addHolidayDialog.fxml"). 但是,您的资源的文件名是AddHolidayDialog.fxml. 只需将代码中的“a”更改为“A”,您的代码就可以工作了。
当您从 Intellij 运行您的应用程序时,它使用out/production/classes目录中的输出文件。换句话说,这些类不在 JAR 文件中。当你打电话时,getClass().getResource("/addHolidayDialog.fxml")你会得到一个URL喜欢:
file://C:/.../out/production/classes/addHolidayDialog.fxml
尽管该文件实际上已命名,但它适用于 Windows,AddHolidayDialog.fxml因为 Windows 具有不区分大小写的文件系统。
然后将项目导出到 JAR 并从那里运行它。调用相同的getResource代码,您现在将获得URL(如果代码有效)如下:
jar:file://C:/.../your-application.jar!/addHolidayDialog.fxml
getResource但是,您的代码实际上从 返回的是null。根据 JAR 文件,该资源addHoldiayDialog.fxml不存在。但是,它会很高兴地告诉您AddHolidayDialog.fxml 确实存在。这样做的原因是 JAR 文件具有区分大小写的“文件系统”。