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

How to replace the methode StageHelper.getStages() from java 1.7 to java 11

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

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

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

对于Java1.8,StageHelper.getStages()方法可以找到here.

然而,对于 Java 1.9,定义 hereStageHelper 不再包括 getStages

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

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

Remove getStages() and make caller of this method to use public API Window.getWindows().

备选方案

正如那个问题中提到的那样,自从 JavaFX 9 你有了这个 public 方法 Window.getWindows(),那将

return a list containing a reference to the currently showing JavaFX windows

请注意,Window 可以是 StagePopupWindow,因此也许您可以将它们过滤掉:

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