使用Spring Boot执行时,应用程序启动方法中出现JavaFX异常
我已经创建了一个简单的javaFX程序,并通过使该项目成为maven项目将springboot添加到javaFX中。在添加SpringBoot之前,我没有收到任何错误,应用程序运行良好。 我已经在下面提供了完整的代码 pom.xml使用Spring Boot执行时,应用程序启动方法中出现JavaFX异常,java,spring-boot,javafx,pom.xml,Java,Spring Boot,Javafx,Pom.xml,我已经创建了一个简单的javaFX程序,并通过使该项目成为maven项目将springboot添加到javaFX中。在添加SpringBoot之前,我没有收到任何错误,应用程序运行良好。 我已经在下面提供了完整的代码 pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.6.RELEASE</version>
</parent>
<groupId>groupId</groupId>
<artifactId>RMI-DesktopClient</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
</project>
Login.java
public class Login {
public static void loadView(Stage stage) {
try {
Parent view = FXMLLoader.load(Login.class.getResource("../../../../../resources/com.ui.views/Login.fxml"));
stage.setScene(new Scene(view));
stage.show();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Login.fxml
<AnchorPane prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.alarmsystem.ui.views.Login">
<children>
<Label layoutX="137.0" layoutY="157.0" text="Hello JavaFX">
<font>
<Font size="59.0" />
</font>
</Label>
</children>
</AnchorPane>
文件结构
资源路径
我不确定这是否与Spring有关;用于FXML的资源名称不是有效的资源名称(堆栈跟踪表明无法找到FXML文件是问题所在) 具体来说,资源名称中不能包含
,因此。
和com.ui.view
都是无效的
因此这里有两个问题:一个是资源名称与其中指定的“父目录”不兼容,另一个是您在resources
下创建了一个包含非法
字符的文件夹(不是包)。还要注意,resources
是一个源文件夹,在运行时不可用
因此,首先,在参考资料下创建一个名为com.ui.views
的包,并将FMXL放在其中。我不使用IntelliJ,所以我不确定是否有这样做的选项,但如果没有,您可以创建一个文件夹com
,它的一个子文件夹ui
,以及它的一个子文件夹views
,并将FXML文件放在views
中
那么FXML的正确资源名是
Parent view = FXMLLoader.load(Login.class.getResource("/com/ui/views/Login.fxml"));
如果您稍微重新构造FXML文件和Login
类,使其位于同一个包中(即,您在资源
下创建了com.alarmsystem.ui.views
包),那么您只需执行以下操作即可
Parent view = FXMLLoader.load(Login.class.getResource("Login.fxml"));
如果需要进一步排除故障,可以通过查看
target/classes
文件夹查看资源部署的位置(因此在运行时可以找到资源) 但是路径不是intellij自动构建的路径,谢谢,但我仍然会遇到相同的错误,错误是在我添加spring boot时开始的,pom.xml中的依赖项可能有问题吗?@GeorgeSilva没有,这与依赖项无关。我不使用IntelliJ,但我看到其他人表示,在某些情况下,IntelliJ不能提供正确的资源名称。(盲目相信IDE的建议总是错误的。)你的target/classes
文件夹中有什么?我检查了target类,路径是正确的,我更改了路径,将fxml文件包含在与Login相同的包中,但仍然得到error@GeorgeSilva更新问题以显示target/classes的实际内容
我刚才添加了target/classes
Parent view = FXMLLoader.load(Login.class.getResource("/com/ui/views/Login.fxml"));
Parent view = FXMLLoader.load(Login.class.getResource("Login.fxml"));