JavaFX是公共API的一部分吗?

3

我正在处理涉及使用JavaFX平台的代码,并在尝试从javafx.application包中导入Application类时遇到了来自Eclipse的以下错误:

Access restriction: The type 'Application' is not API (restriction on 
required library rt.jar)

尝试从javafx.applicationjavafx.scenejavafx.stage包中导入类时,我遇到了上述错误。感谢这个答案,我现在知道问题是由Eclipse默认放置的访问限制引起的,以防止意外使用它认为不属于公共API的类。JavaFX是否也是如此?此外,我也不确定一个包或类被视为公共API是什么意思。
2个回答

3
感谢来自@Slaw@Benjamin@Florian's answer的回应,我现在可以回答我的问题了: JavaFX 2.2及更高版本已完全集成到Java SE 7运行时环境(JRE)和Java开发工具包(JDK)中。然而,自Java SE 11以来,JavaFX不再是标准JDK的一部分。这可能是为什么Eclipse会担心并需要显式访问规则的库的原因。
此外,评论有助于澄清这并不意味着JavaFX的稳定性和未来可靠性完全不确定。截至目前,JavaFX稳定,并作为OpenJFX进行开发,它是OpenJDK项目的一部分(Java SE的免费开源实现)。最新版本是JavaFX 13。
总之,JavaFX具有“公共”API,例如javafx.*包,以及“私有”API,例如com.sun.javafx.*包。然而,当前状态下JavaFX的含义是,作为一个库,它将像任何其他外部依赖项一样被拉入,因为它没有与标准JDK/JRE捆绑在一起。

0
简而言之,JavaFX不属于“公共”Java API。
Java API包含开发人员所需的最常用工具,例如集合、网络、不同的解析器等等...因此,JavaFX不在公共Java API中。
如果您想查看包含哪些工具,可以查看此链接https://docs.oracle.com/javase/7/docs/api/

@typicaldanny OpenJFX是一个开源的、免费的软件库,根据_GNU通用公共许可证与类路径例外_进行许可。然而,我不知道其中有多少与JavaFX 8相关。请注意,自从Java 11开始,JavaFX库已经从JDK中移除,现在必须像其他依赖项一样引入。当前版本是JavaFX 13。 - undefined
1
我对这个答案持怀疑态度。Eclipse试图让你思考的一般问题是:“这个类在未来的标准库发布中可能会消失吗?这重要吗?”标准库开发人员可能希望在未来清理掉许多“内部”类(如果我没记错的话,它们的包名通常以sun开头)。但对于javafx.application.Application来说,这似乎不太可能。 - undefined
另外,你可能想查看一下最新的Java版本的文档。 - undefined
@typicaldanny 目前来看,JavaFX的未来发展是作为OpenJDK项目的一部分继续开发的OpenJFX。目前,OpenJFX正在模仿Java每六个月发布一次的周期,包括主要版本之间的两个补丁发布。Gluon目前提供(付费)长期支持JavaFX 11,并且最新版本是JavaFX 13。 - undefined
那个答案是指Java7的API,但FX已经集成到Java8中,并在Java11中发布(如果我没记错的话)。 - undefined
显示剩余7条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接