【问题标题】:JavaFX Exception: Internal graphics not initialized yetJavaFX 异常:内部图形尚未初始化
【发布时间】:2020-05-23 23:09:00
【问题描述】:

我正在尝试在构造函数中加载控制器,为此我必须首先调用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 行(在异常中引用)是相当无害的

&lt;Image url="@../image.png" /&gt;

非常欢迎任何建议,提前谢谢。

【问题讨论】:

  • 发布minimal reproducible example。这看起来像是应用程序生命周期的问题,因此如果没有完整(但最小)的可运行示例,任何人都不太可能找出问题所在。
  • 我认为您的问题与图像 URL 有关(尤其是 .. -> 运行编译代码时,图像的相对路径可能不同)。您可以尝试将您的图像放在与 FXML 文件相同的文件夹中进行测试。

标签: java javafx fxml


【解决方案1】:

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

关于如何测试这个的好建议here

【讨论】:

    猜你喜欢
    • 2015-03-06
    • 2017-01-27
    • 2012-04-07
    • 2013-08-02
    • 1970-01-01
    • 2021-11-29
    • 2023-03-17
    • 2016-12-22
    相关资源
    最近更新 更多