javafx.fxml.LoadException - 找不到.fxml文件

时间:2017-08-20 20:28:09

标签: nullpointerexception javafx-8 fxml fxmlloader fileloadexception

首先,我绝对不是母语人士所以我希望我能在这篇文章中找到正确的内容:D

那么问题是什么?当我尝试使用几个不同的" windows"构建一个javaFX应用程序时。 问题是当我尝试在MainController类中生成一个initialize()函数时。此函数应使用登录名和密码字段加载第一个窗口。

问题只有在我在MainController类的initialize()方法中加入一些逻辑才能加载另一个Window时。 对我来说很奇怪,因为根据控制台的主要问题是编译器找不到构建主窗口的.fxml文件,而不是第二个(由initialize()方法构建。

如果有人知道什么似乎是问题?

错误是:

  

找不到:.file:/ C:/Users/ADMIN/workspace%20FX/SchoolList/target/classes/fxml/AppMainScreen.fxml //

     
    
      

这是我的try / catch块的输出,.fxml文件肯定存在。路径和名称是正确的。

    
  
     

javafx.fxml.LoadException:   /C:/Users/ADMIN/workspace%20FX/SchoolList/target/classes/fxml/AppMainScreen.fxml

     

在   javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2601)     在javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2579)at   javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2441)at at   javafx.fxml.FXMLLoader.load(FXMLLoader.java:2409)at at   pl.mati.schoolList.app.SchoolListApp.start(SchoolListApp.java:28)at   com.sun.javafx.application.LauncherImpl.lambda $ launchApplication1 $ 162(LauncherImpl.java:863)     在   com.sun.javafx.application.PlatformImpl.lambda $ runAndWait $ 175(PlatformImpl.java:326)     在   com.sun.javafx.application.PlatformImpl.lambda为$ null $ 173(PlatformImpl.java:295)     在java.security.AccessController.doPrivileged(Native Method)at   com.sun.javafx.application.PlatformImpl.lambda $ runLater $ 174(PlatformImpl.java:294)     在   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)     在java.lang.Thread.run(Thread.java:745)

     

引起:    java.lang.NullPointerException at   的 pl.mati.schoolList.controllers.MainController.initialize(MainController.java:73)     在javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2548)... 12更多   Application start方法中的异常   java.lang.reflect.InvocationTargetException at   sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at   sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)     在   sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)     在java.lang.reflect.Method.invoke(Method.java:498)at   com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:389)     在   com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:328)     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at   sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)     在   sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)     在java.lang.reflect.Method.invoke(Method.java:498)at   sun.launcher.LauncherHelper $ FXHelper.main(LauncherHelper.java:767)   引起:java.lang.RuntimeException:Application start中的异常   方法   com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:917)     在   com.sun.javafx.application.LauncherImpl.lambda $ launchApplication $ 155(LauncherImpl.java:182)     在java.lang.Thread.run(Thread.java:745)

     

引起:    java.lang.NullPointerException:Root不能为null at   javafx.scene.Scene。(Scene.java:336)at   javafx.scene.Scene。(Scene.java:194)at    pl.mati.schoolList.app.SchoolListApp.start(SchoolListApp.java:42) at   com.sun.javafx.application.LauncherImpl.lambda $ launchApplication1 $ 162(LauncherImpl.java:863)     在   com.sun.javafx.application.PlatformImpl.lambda $ runAndWait $ 175(PlatformImpl.java:326)     在   com.sun.javafx.application.PlatformImpl.lambda为$ null $ 173(PlatformImpl.java:295)     在java.security.AccessController.doPrivileged(Native Method)at   com.sun.javafx.application.PlatformImpl.lambda $ runLater $ 174(PlatformImpl.java:294)     在   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个异常运行应用程序   pl.mati.schoolList.app.SchoolListApp

编译器无法加载fxml文件,这会导致在应该注入StackPane的地方出现nullPointerException(从fxml文件加载stackPane)。

这是我的课程: 我的主类,启动应用程序。

SchoolListApp.class

public class SchoolListApp extends Application{

    public static void main (String[] args){
        launch(args);
    }

    @Override
    public void start(Stage stage) throws Exception {
        FXMLLoader loader = new FXMLLoader();
        StackPane mainStackPane = null;

        URL path = getClass().getResource("/fxml/AppMainScreen.fxml");

        try {
            loader.setLocation(path);
            mainStackPane = (StackPane) loader.load();
        }
         catch (IOException e) {
            System.out.println("Not found: " + path);
            e.printStackTrace();

        }
        catch (Exception e) {

            // Answer:
            e.getCause().printStackTrace();

        }
        MainController controller = loader.getController();
        Scene scene = new Scene(mainStackPane);  //here i got the Caused by: java.lang.NullPointerException: Root cannot be null. error//

        stage.setScene(scene);

        stage.setTitle("School List Manager Application");
        stage.show();

    }

}

主控制器类。如果initiliazie方法为空 - 编译器工作正常,它构建了第一个窗口。但是当我尝试构建另一个窗口时,我得到了错误。

MainController.class

public class MainController implements Initializable{

    @FXML
    private StackPane mainStackPane;

    @FXML
    public void initialize(){

        FXMLLoader loader = new FXMLLoader();
        Pane pane = null;

        URL path;
        path = getClass().getResource("/fxml/HelloWindow.fxml");
        try {
            loader.setLocation(path);
            pane = loader.load();
        }
         catch (IOException e) {
            System.out.println("Not found: " + path);
            e.printStackTrace();

        }
        catch (Exception e) {

            // Answer:
            e.getCause().printStackTrace();

        }
        mainStackPane.getChildren().add(pane);

    }

    public MainController() {

    }

0 个答案:

没有答案