JavaFX FXMLLoader无法加载.fxml文件

时间:2016-02-09 11:34:00

标签: java javafx-8

我目前正在处理javaFX应用程序,我的问题是我一直遇到这个异常:

javafx.fxml.LoadException: fx:controller can only be applied to root element.

我使用的是Java 8和JavaFX版本(显示在javafx.properties中)是javafx.runtime.version = 8.0.65 javafx.runtime.build = B17

以下是我尝试加载的一些LoginView.fxml:

<AnchorPane fx:id="root" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="320.0" prefWidth="480.0" style="-fx-background-color: lightblue" xmlns:fx="http://javafx.com/fxml" fx:controller="com.th.officesuite.ui.login.LoginController">
....
</AnchorPane>

这是我试图加载这个的地方:

   public FxmlDialog(final DialogController controller, URL fxml, Window owner, StageStyle style, LanguageModel lang) {
    super(style);
    initOwner(owner);
    initModality(Modality.WINDOW_MODAL);
    FXMLLoader loader = new FXMLLoader();
    try {
        loader.setControllerFactory(new Callback<Class<?>, Object>() {
            @Override
            public Object call(Class<?> aClass) {
                return controller;
            }
        });
        loader.setBuilderFactory(new JavaFXBuilderFactory());
        URL systemResource1 = ClassLoader.getSystemResource("fxml/LoginView.fxml");
        loader.setResources(lang.getBundle());
        loader.setLocation(systemResource1);
        Scene scene = new Scene((Parent) loader.load());
        scene.getRoot().setOnMouseDragged(getMouseDraggedHandler());
        scene.getRoot().setOnMousePressed(getMousePressedHandler());
        setScene(scene);
        fxmlStream.close();
        controller.setDialog(this);            
    } catch (IOException e) {
        System.out.println(e.getMessage());
        throw new RuntimeException(e);
    }
}

检查网址&amp;验证&amp;不是null,LoginView.fxml是可见的,就在那里,它应该在jar文件中。 我还想提一下,这段代码就像2天前一样对我有用......直到今天。我只是在单独的模块中更改了与hibernate相关的一些内容,应该受到影响。 这种问题有适当的解决方案吗?我知道有很多类似的问题,但提供的解决方案都没有帮助我。我尝试用<AnchorPane... >替换<fx:root type...>但是没有用(因为没有设置根目录而大喊......)。

0 个答案:

没有答案