首页 > 解决方案 > JavaFX 异常:内部图形尚未初始化

问题描述

我正在尝试在构造函数中加载一个控制器,为此我必须先调用loader.load(),否则getController()返回null,正如我在多个stackoverflow答案中所读到的那样。

protected static final FXMLLoader connectLoader = new FXMLLoader(GuiManager.class.getResource("/scenes/connect.fxml"));

private final ConnectController connectController;

public Gui() {

    try {
        connectLoader.load();
    } catch (IOException e) {
        e.printStackTrace();
    }

    connectController = connectLoader.getController();
}

然而 load() 抛出这个异常:

javafx.fxml.LoadException: 
/home/user/IdeaProjects/project/target/classes/scenes/connect.fxml:13
...
Caused by: java.lang.RuntimeException: Internal graphics not initialized yet
...

控制器在 fxml 的第一行中指定:

<AnchorPane xmlns="http://javafx.com/javafx/10.0.2-internal" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.project.gui.ConnectController">

fxml 文件的第 13 行(在异常中引用)是相当无害的

<Image url="@../image.png" />

非常欢迎任何建议,在此先感谢您。

标签: javajavafxfxml

解决方案


问题是 Application 的 start() 方法还没有完成执行,并且在调用 load() 时还没有创建阶段。

关于如何测试这个的好建议也在这里


推荐阅读