如何将方法 StageHelper.getStages() 从 java 1.7 替换为 java 11

pac*_*que 1 java migration java-7 java-11 javafx-11

JavaFX我正在将使用fromJava 1.7的应用程序迁移到Java 11。我遇到的错误之一是关于StageHelper.getStages()已经消失的方法。我没有找到任何东西可以替代它。您有替代此方法的解决方案吗?感谢您的帮助 !:)

Jos*_*eda 5

StageHelper一直是私有 API,因为它是com.sun.javafx.stage. 因此,您应该知道私有 API 可以随时更改或删除,恕不另行通知。

对于 Java 1.7,我不能说,JavaFX(2.2?)当时还没有开源。

对于 Java 1.8,可以在此处StageHelper.getStages()找到该方法。

然而,对于 Java 1.9 ,此处StageHelper定义的不再包含。getStages

其原因可以在本期JDK-8156170: Clean up Stage and StageHelper中找到。

如果您阅读描述,作为问题的一部分,他们将:

删除getStages()并让该方法的调用者使用公共 API Window.getWindows()

备择方案

正如该问题中提到的,从 JavaFX 9 开始,您就有了这个公共方法Window.getWindows(),这将

返回一个列表,其中包含对当前显示的 JavaFX 窗口的引用

请注意, aWindow可以是 aStage或 a PopupWindow,所以也许您可以将它们过滤掉:

List<Stage> stages = Window.getWindows().stream()
            .filter(Stage.class::isInstance)
            .map(Stage.class::cast)
            .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)