代码之家  ›  专栏  ›  技术社区  ›  user1167253

在Java9中运行JavaFX应用程序线程/工具包

  •  2
  • user1167253  · 技术社区  · 7 年前

    我正在尝试将一个程序从java 8迁移到java 9。

    在我的程序中,我发现了以下代码。

    //Run JavaFX Application Thread/Toolkit
        PlatformImpl.startup(() -> {
        });
    

    它尝试启动JavaFX工具包

    不幸的是,PlatformImpl。java 9中不再支持启动。

    有什么替代品?

    如何启动JavaFX工具包?

    非常感谢。

    1 回复  |  直到 7 年前
        1
  •  3
  •   James_D    7 年前

    这个 startup() 方法是从非公共类升级的方法之一 PlatformImpl 到公共API Platform 类。现已在 API documentation .

    因此,Java 9中的等效调用是

    Platform.startup(() -> { });
    

    请注意,这种方法的用例非常罕见,API文档中详细强调了这一点:

    一般来说,没有必要显式调用此方法,因为它是根据大多数JavaFX应用程序的构建方式进行调用的。

    ...

    如前所述,JavaFX应用程序线程通常会自动启动。重要的是,仅当JavaFX运行时尚未初始化时才调用此方法。自动启动JavaFX运行时的情况包括:

    适用于扩展 Application ,并使用Java启动器或 应用 类来启动应用程序,FX运行时由启动器在 应用 类已加载。

    • 对于使用 JFXPanel 要显示FX内容,当第一个 JFX面板 实例已构建。
    • 对于使用 FXCanvas 要显示FX内容,当第一个 FXCanvas 实例已构建。 如果应用程序不遵循这些常见方法中的任何一种,那么开发人员就有责任通过调用此启动方法手动启动JavaFX运行时。

    当JavaFX运行时已经运行时调用此方法将导致 IllegalStateException 被抛出-只有请求JavaFX运行时启动一次才有效。

    因此,当您正在进行更新应用程序以使其与Java 9兼容所需的更改时,您可能需要仔细考虑是否需要调用 启动() 完全也许有一种更标准、更健壮的方法来启动JavaFX应用程序。