我有一个重新加载CSS的实用工具类。来获取我正在使用的场景图的所有阶段
com.sun.javafx.stage.StageHelper#getStages()
在Java9中,如果在编译过程中不指定--add-exports
,就无法再访问它。
--add-exports=javafx.graphics/com.sun.javafx.stage=ALL-UNNAMED
我正在寻找一个替代StageHelper在获得所有阶段上的场景图。
在StageHelper.getStages()
中有一个与Window.getWindows()
等价的公共API。
然而,这两者之间有一个细微的区别:
StageHelper.getStages():返回包含此时创建的各个阶段的ObservableList。
Window.getWindows():返回一个列表,其中包含对当前显示JavaFX窗口的引用。
我从中得到的是,使用窗口而不是StageHelper不会给我看不见/隐藏的阶段。
在Java8中,Window.impl_getWindows()返回所有窗口,更不用说可见性了。
当前所有现有窗口的列表。
这在Java 9 Window.getWindows()中得到了改变。
当前所有显示窗口的列表。
发布于 2018-05-07 09:40:02
应该避免内部API和不推荐的方法。但是,对于Java 8,如果需要获取场景图上的所有阶段,就没有选择使用这些步骤。
当您需要支持Java 8时,解决方案:
com.sun.javafx.stage.StageHelper.getStages()
这可以通过指定--add作为命令行参数来处理java 9.
--add-exports=javafx.graphics/com.sun.javafx.stage=ALL-UNNAMED
避免使用Window.impl_getWindows(),因为它不会在Java9上运行。
方法名称和返回值是不同的。
Java 8:
Iterator<Window> itr = Window.impl_getWindows();
Java 9:
List<Window> windows = Window.getWindows();
Java 9的解决方案:
使用Window.getWindows()获取所有阶段。
Window.getWindows()的方法描述:
返回一个列表,其中包含对当前显示JavaFX窗口的引用。
人们可能会认为,这将只返回一个窗口的列表是可见的。我对此进行了测试,它将列出所有窗口,甚至那些最小化的窗口(即不可见的窗口)。这与关于显示的描述不一样。这意味着在调用stage.show()之后将显示属性设置为true。
https://stackoverflow.com/questions/47751399
复制相似问题