我的代码已经变得相当大,因此我决定构建一个可运行的 JAR 来看看它是如何完成的。我可能应该早点尝试,因为我遇到了 2 个与项目结构相关的不同错误,第一个是尝试从命令提示符运行 JAR 时出现“无主 list 属性错误”。双击 JAR 不会执行任何操作 (Win7)。第二个问题与下面解释的 FXMLLoader 有关。
我按照步骤here进行操作构建 JAR,这涉及将所有 Maven 文件移动到 JAR 目录中。编译的 JAR 给了我明显的错误,所以我按照 this 进行操作。它在我的 pom.xml
中添加了一个 Maven 插件文件。该错误可能是由于 <mainClass>com.primary.Drag</mainClass>
行的命名约定错误引起的。哪里primary
是包裹和 Drag
是我的 Drag.java 文件(类),其中包含 main
方法。
最初我使用的是默认包,但了解到不建议将其用于较大的项目,因此我将所有文件放入“primary”中。这是我当前的层次结构,如 IntelliJ 中所示:
问题是,自从我创建了“主”包后,我什至无法再通过 IntelliJ 编译程序,更不用说构建可运行的 JAR 了。这是由我提到的第二个错误引起的,即 java.lang.IllegalStateException: Location is not set.
在 primary/Drag.java
内的这条线上:
FXMLLoader loader = new FXMLLoader(getClass().getClassLoader().getResource("firstlaunch.fxml"));
它曾经可以与默认包一起使用,但现在不行了。
我尝试替换 firstlaunch.fxml
与 /primary/firstlaunch.fxml
和/resources/firstlaunch.fxml
(无论是否将资源移入主包)但运气不佳。
3 个相关问题:
- 我的项目结构是否不正确?
- 如何引用
primary
中的 fxml 文件包? - 这是我应该在 Maven 的 mainClass 标签中编写的内容吗?
<mainClass>com.primary.Drag</mainClass>
最佳答案
- 我的项目结构是否不正确?
答案:
你的包名称应该类似于 com.primary.******
- 如何引用主包中的 fxml 文件?
答案:
始终确保您尝试从类中加载firSTLaunch .xml,该类位于保存该xml 的同一包中。意味着你编写的加载代码和xml文件的类应该在同一个包中
- 这是我应该在 Maven 的 mainClass 标签中编写的内容吗?com.primary.Drag
答案:
如果你的包名更正为 com.primary ,你的主类 Drag 将被 maven 正确添加
关于JavaFX : Need help understanding project hierarchy issues,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36369194/