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