我在试图在IntelliJ中配置Maven和JavaFX项目时遇到了麻烦。
首先我不知道该怎么做,所以我找到了以下解决方案:
在第一步应用程序工作之后(当然,因为它只是普通的JavaFX项目),然后在第二步之后包已经改变,所以我不得不为每个类设置包;我已经做到了,我没有看到任何错误。但是当我尝试运行应用程序时,我得到以下错误,在图片上:
我还将sample.fxml移动到资源文件夹。
也许我需要将groupId设置为某些东西,但我不知道是什么,我已经尝试将其设置为包的名称(示例),但它不起作用。
其余代码:
Main.java:
package sample;
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 {
Parent root = FXMLLoader.load(getClass().getResource("../../resources/sample.fxml"));
primaryStage.setTitle("Hello World");
primaryStage.setScene(new Scene(root, 300, 275));
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
sample.fxml:
<?import javafx.geometry.Insets?>
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<GridPane fx:controller="sample.Controller"
xmlns:fx="http://javafx.com/fxml" alignment="center" hgap="10" vgap="10">
</GridPane>
Controller.java
package sample;
public class Controller {
}
答案 0 :(得分:5)
这对我来说更容易。
resources
的{{1}}下创建文件夹(samples
中相同)src/main/java
为Parent root = FXMLLoader.load(getClass().getResource("../../resources/sample.fxml"));
答案 1 :(得分:0)
我重写了你所说的,即我创建了一个JavaFX项目,然后添加了框架支持。
在我添加Maven支持后,我将sample.fxml
移动到resources
目录中,因为它是一个资源。
我最终必须在package sample;
和package main.java.sample;
类中将Main
更改为Controller
。
在此之后,我必须将sample.fxml
控制器引用从fx:controller="sample.Controller"
更改为fx:controller="main.java.sample.Controller"
在此之后,它成功运行。
错误的核心是java.lang.NullPointerException: Location is required
。当您添加Maven支持时,它会移动您的目录,因此package sample;
不再正确,因为sample
目录不再是项目的直接子项。因此,您必须更改package
所指向的位置,在这种情况下,您的sample
目录位于main.java.sample
。您也必须忘记编辑sample.fxml
文件,因为它通过Controller
引用了您的fx:controller
课程。