将maven添加到我的JavaFX模块后,您好崩溃了,找不到解决方法。我真的从stackof尝试了很多解决方案,但没有任何效果。在我的start()方法中,intellij找不到我的fxml文件的资源,当我在同一目录中创建其他fxml文件时,它也始终返回null。这真的很奇怪,因为当我使用CTRL +单击second.fxml intellij正确找到文件时。在Maven之前一切都在工作。
尝试:
- getClass().getResource("second.fxml")
- getClass().getClassLoader().getResource("second.fxml")
- System.out.println("Test = "+Main.class.getClassLoader().getResource("second.fxml")); <- always null
- getClass().getClassLoader().getResource("src/java/sample/second.fxml")
And a lot of other combine with getClass().
主类
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception{
System.out.println("Test = "+Main.class.getClassLoader().getResource("second.fxml"));
Parent root = FXMLLoader.load(getClass().getResource("second.fxml"));
primaryStage.setTitle("Hello");
primaryStage.setScene(new Scene(root, 800, 800));
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
FXML类
<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<AnchorPane xmlns="http://javafx.com/javafx"
xmlns:fx="http://javafx.com/fxml"
fx:controller="pl.zar.fx.Controller"
prefHeight="400.0" prefWidth="600.0">
</AnchorPane>
控制器类
public class Controller {
@FXML
public void onClickAddButton(ActionEvent event){}
}
还有我的Maven pom
<?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>
<groupId>groupId</groupId>
<artifactId>javafxapp</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies> <dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.5</version>
</dependency></dependencies>
</project>
错误代码:
Exception in Application start method
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:389)
at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:328)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767)
Caused by: java.lang.RuntimeException: Exception in Application start method
at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:917)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$155(LauncherImpl.java:182)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.NullPointerException: Location is required.
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3207)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3175)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3148)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3124)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3104)
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:3097)
at pl.zar.fx.Main.start(Main.java:15)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$162(LauncherImpl.java:863)
at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(PlatformImpl.java:326)
at com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191)
... 1 more
Exception running application pl.zar.fx.Main
我期望返回我的fxml模板,但始终会为NULL。 编辑项目结构: project structure
答案 0 :(得分:0)
我建议将您的fxml
文件放入resources
文件夹中,并使用以下代码对其进行调用:
Parent root = FXMLLoader.load(getClass().getClassLoader().getResource("second.fxml"));
这里重要的是,您需要将fxml
文件移动到资源文件夹中。否则它将无法正常工作。
也记录在this答案中。
答案 1 :(得分:0)
好吧,我解决了: 我按照您所说的将fxml文件移至资源并切换
Parent root = FXMLLoader.load(getClass().getResource("second.fxml"));
到
Parent root = FXMLLoader.load(Main.class.getClassLoader().getResource("second.fxml"));
现在工作良好,我不知道为什么我必须使用对Main类的引用。在添加Maven框架之前,一切都很好。