我目前正在处理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...>
但是没有用(因为没有设置根目录而大喊......)。