java.lang.NullPointerException:需要位置

这是我的主类

package application; import javafx.application.Application; import javafx.fxml.FXMLLoader; import javafx.stage.Stage; import javafx.scene.Parent; import javafx.scene.Scene; public class Main extends Application { @Override public void start(Stage primaryStage) { try { Parent root = FXMLLoader.load(getClass().getResource("application/anwendung.fxml")); primaryStage.setTitle("Benutzerverwaltung"); root.getStylesheets().add(getClass().getResource("application.css").toExternalForm()); primaryStage.setScene(new Scene(root)); primaryStage.show(); } catch(Exception e) { e.printStackTrace(); } } public static void main(String[] args) { launch(args); } } 

这是我的Controller类

 package application; import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.scene.Node; import javafx.scene.control.Button; import javafx.scene.input.InputEvent; import javafx.stage.Stage; class AnwendungsController { @FXML public Button closeButton; @FXML public void handleCloseButtonAction(ActionEvent event) { Stage stage = (Stage) closeButton.getScene().getWindow(); stage.close(); } } 

这是我的fxml文件

        

我该如何解决? 我从这里尝试JavaFX的所有内容“需要位置”。 即使它在同一个包装中

更新:

 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 application.Main.start(Main.java:20) 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) at java.lang.Thread.run(Unknown Source) 

存在两个问题:

1)文件路径

2)控制器设置不正确

Reccomendation:

如果您正在使用SceneBuilder,当您想要查看控制器的方式时,您可以进入View -> Show Sample Controller Skeleton -> Copy -> Paste -> Enjoy Life (until next error occurs :|| )


主要课程:

 package application; import javafx.application.Application; import javafx.fxml.FXMLLoader; import javafx.stage.Stage; import javafx.scene.Parent; import javafx.scene.Scene; public class Main extends Application { @Override public void start(Stage primaryStage) { try { System.out.println(getClass().getResource("anwendung.fxml").getPath()); //other solution //FXMLLoader loader = new FXMLLoader(getClass().getResource("anwendung.fxml")); //Parent root = loader.load(); //Keep in mind that you are calling a static method Parent root = FXMLLoader.load(getClass().getResource("anwendung.fxml")); primaryStage.setTitle("Benutzerverwaltung"); root.getStylesheets().add(getClass().getResource("application.css").toExternalForm()); primaryStage.setScene(new Scene(root)); primaryStage.show(); } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { launch(args); } } 

控制器:

 package application; import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.scene.control.Button; import javafx.scene.input.MouseEvent; public class AnwendungsController { @FXML private Button closeButton; @FXML void handleCloseButtonAction(ActionEvent event) { } @FXML void onMouseClickedCancelBtn(MouseEvent event) { } } 

FXML: