我试图运行我的JavaFX程序,但是遇到了一些困难。我不断收到错误消息“ java.lang.NullPointerException:必须提供位置”。这是我的代码MainApp:
package de.stl.saar.projektarbeit;
import de.stl.saar.projektarbeit.constants.FXConstants;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
import java.io.IOException;
public class MainApp extends Application {
private Stage primaryStage;
public static void main(String[] args){
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
this.primaryStage = primaryStage;
this.primaryStage.setTitle(FXConstants.APPLICATION_NAME);
initRootLayout();
}
private void initRootLayout() {
try {
Parent root = FXMLLoader.load(getClass().getClassLoader().getResource(FXConstants.PATH_ROOT_LAYOUT));
primaryStage.setScene(new Scene(root, FXConstants.WIDTH_ROOT_LAYOUT, FXConstants.HEIGHT_ROOT_LAYOUT));
primaryStage.setResizable(false);
primaryStage.centerOnScreen();
primaryStage.setTitle("Hauptfenster");
primaryStage.show();
} catch (IOException e) {
e.printStackTrace();
}
}
}
这是我的FXConstants文件的副本:
package de.stl.saar.projektarbeit.constants;
public class FXConstants {
public static final String APPLICATION_NAME = "Bachelorarbeit-Tool";
private static final String FXML_PATH = "de/stl/saar/projektarbeit/view/javafx/fxml/";
private static final String FXML_SUFFIX = ".fxml";
public static final String PATH_ROOT_LAYOUT = FXML_PATH + "MainWindow" + FXML_SUFFIX;
public static final int WIDTH_ROOT_LAYOUT = 800;
public static final int HEIGHT_ROOT_LAYOUT = 500;
}
这是MainWindow.fxml文件的副本:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Menu?>
<?import javafx.scene.control.MenuBar?>
<?import javafx.scene.control.MenuItem?>
<?import javafx.scene.control.TableColumn?>
<?import javafx.scene.control.TableView?>
<?import javafx.scene.layout.AnchorPane?>
<AnchorPane prefHeight="500.0" prefWidth="800.0" xmlns="http://javafx.com/javafx/8.0.172-ea" xmlns:fx="http://javafx.com/fxml/1" fx:controller="de.stl.saar.projektarbeit.view.javafx.controller.MainWindowController">
<children>
<MenuBar visible="false" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0">
<menus>
<Menu mnemonicParsing="false" text="File">
<items>
<MenuItem mnemonicParsing="false" text="Close" />
</items>
</Menu>
<Menu mnemonicParsing="false" text="Edit">
<items>
<MenuItem mnemonicParsing="false" text="Delete" />
</items>
</Menu>
<Menu mnemonicParsing="false" text="Help">
<items>
<MenuItem mnemonicParsing="false" text="About" />
</items>
</Menu>
</menus>
</MenuBar>
<TableView fx:id="tv_bachelorData" layoutX="57.0" layoutY="50.0" prefHeight="200.0" AnchorPane.bottomAnchor="100.0" AnchorPane.leftAnchor="50.0" AnchorPane.rightAnchor="50.0" AnchorPane.topAnchor="50.0">
<columns>
<TableColumn fx:id="tc_students" prefWidth="234.0" text="Student" />
<TableColumn fx:id="tc_projects" minWidth="0.0" prefWidth="234.0" text="Projekt" />
<TableColumn fx:id="tc_dates" prefWidth="232.0" text="Abgabe-Datum" />
</columns>
</TableView>
<Button fx:id="bt_addStudent" layoutX="106.0" layoutY="425.0" mnemonicParsing="false" text="Student hinzufügen" />
<Button fx:id="bt_addProject" layoutX="344.0" layoutY="425.0" mnemonicParsing="false" text="Projekt hinzufügen" />
</children>
</AnchorPane>
控制器类确实存在,并且位于fxml文件中指定的包中。我所有的名字都是正确的,也是我认为应该的位置。我想念什么? 我正在使用Intellij IDEA。
编辑: 在de.stl.saar.projektarbeit.MainApp.initRootLayout(MainApp.java:32)
在de.stl.saar.projektarbeit.MainApp.start(MainApp.java:27)