JavaFX FXML API 版本警告

Posted

技术标签:

【中文标题】JavaFX FXML API 版本警告【英文标题】:JavaFX FXML API version warning 【发布时间】:2016-05-14 14:27:00 【问题描述】:

我最近开始在启动我的 JavaFX 应用程序时注意到以下警告:

警告:版本 8.0.60 的 JavaFX 运行时使用版本 8.0.65 的 JavaFX API 加载 FXML 文档

有问题的 FXML 是由 Gluon Scene Builder 8.1.0 创建的,使用捆绑的 Java 版本 1.8.0_65 运行。该应用程序使用我的操作系统 Java 版本 1.8.0_72 启动。

FXML的根节点确实有这个属性

xmlns="http://javafx.com/javafx/8.0.65"

但我认为 1.8.0_72 > 1.8.0_65,那么为什么我会收到此消息? 这是我应该担心的事情吗?有没有办法问 jre 什么是 JavaFX API 版本(显然,它与 Java 版本不同)?

编辑: 运行 James_D 建议的代码会得到以下结果:

java 版本:1.8.0_72-internal javafx.version: 8.0.60

那么,看起来 JDK 中的 JavaFX 版本是错误的?或者我有一个旧的 jfxrt.jar?我会调查的。

【问题讨论】:

试试System.out.println("java version: "+System.getProperty("java.version"));System.out.println("javafx.version: " + System.getProperty("javafx.version"));。它们几乎肯定是相同的,所以也许您运行的不是您认为的操作系统 Java 版本。 它们实际上并不相同。我已经编辑了我的问题。我怀疑由于 javafx 仍然出现在 Debian 上的一个单独的包中,它不知何故没有更新。 啊,是的,你使用的是开放的 JDK(我猜),所以 JavaFX 是一个单独的包。看起来您使用的是旧版本的 JavaFX。因此,我不知道任何特定于 u65 的 FXML 超过 u60,但总的来说,我猜您可能应该使用至少与您构建它的版本一样新的版本来执行。如果可能的话,我会继续让你的 JavaFX 版本与你的 Java 版本保持同步。 目前 openjfx 包的版本是 8u60,所以升级意味着从源代码构建,我不愿意这样做。有一些讨论here,但我真的很困惑为什么它们仍然是两个独立的包(以及为什么 OpenJFX 一个还没有更新)。 【参考方案1】:

我认为您的JDK 版本是1.8.0_60JRE 版本是1.8.0_65

所以你应该为他们两个使用相同的版本。

您可以分别在命令提示符上查看您当前的JDKJRE 版本,

java -version
javac -version

或者您可以使用以下java代码浏览系统属性,

System.out.println(System.getProperties());

【讨论】:

【参考方案2】:

我在使用 Intellij IDEA 的 Linux 上遇到了同样的问题。我通过安装最新的 Oracle JDK 解决了这个问题,并在 IDEA 的“项目结构”设置菜单中提供了它的路径:

文件/项目结构/平台设置/SDK

【讨论】:

【参考方案3】:

如果你使用表格:

xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml"

版本控制被忽略。只有在与其他版本存在兼容性问题时才需要它。

【讨论】:

我没有得到这个答案的否定投票 - 这对我来说确实有效! “xmlns:fx="javafx.com/fxml/1"这个条目我没碰过。 请注意:SceneBuilder 会覆盖这个!【参考方案4】:

我也有这个问题。我管理它只是为了更改 *.fxml 文件中的行:

javafx/8.0.171 -> javafx/8.0.141

以前是这样的,是fxml文件开头的一行:

<AnchorPane prefHeight="300.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.application.word.view.LoginController">

然后我将其更改为:

<AnchorPane prefHeight="300.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.141" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.application.word.view.LoginController">

而且它可以正常工作。但请注意,如果您使用不同的 jdk 代,它可能会有所不同。

【讨论】:

【参考方案5】:

我有同样的问题。 不知道你们在运行什么 IDE,但我在 Eclipse 上修复了它。

JRE 系统库右侧的项目浏览器中显示[J2SE-1.5]。 我右击JRE System Library,进入Properties。 从执行环境切换到工作区默认环境

如果在 workspace default environment 括号内,它不会显示您最新的 jdk 版本,例如。 (jdk1.8.0_192)您可以通过选择Installed JREs按钮并切换选中的JRE来更改它。

如果您的 jdk 未列出,请使用 ADD 按钮添加它并选择您的 JDK 目录,例如。 C:\Program Files\Java\jdk1.8.0_192,作为主目录。

如果由于某种原因,您不想更改默认环境,只需选择 Alternate JRE 而不是 Workspace default JRE。然后从下拉菜单中选择正确的 SDK。

PS。是的,您可以在 fxml 文件中的 xmlns 选项下更改版本,但是每次在 Scene Builder 中修改 fxml 时,您都必须更新条目。

【讨论】:

【参考方案6】:

我有同样的问题,但我通过这些步骤解决了它

如果您使用 Intellij IDEA,请转到 File -> Project Structure -> SDKs 并单击 (-) 符号 以删除您之前拥有的所有其他 JDK,然后单击在 (+) 符号上将新的 JDK 添加到您的项目中 C:\Program Files (x86)\Java\jdk1.8.0_172

【讨论】:

【参考方案7】:

对我来说也是如此。正如您提到的,您的场景构建器版本是 8.1.0,而您的 Javafx 版本是 8.0.60。好吧,他们是不同的:) 解决这个问题的两种方法

卸载当前场景构建器并安装与您的 Javafx 版本相同的场景构建器 每次使用场景构建器编辑 FXML 文件时,将标题中的 xmlns 属性更改为您的 Javafx 版本

例如,当我使用场景构建器 10.0.1 时,我的 javafx 版本是 9.0.1,但在场景构建器中编辑后我更改了

xmlns="http://javafx.com/javafx/9.0.1"

xmlns="http://javafx.com/javafx/9.0.1"

为了自己的缘故:)

【讨论】:

【参考方案8】:

我也有同样的问题,我正在加载我的 fxml 文件吗 警告:版本 8.0.111 的 JavaFX 运行时使用版本 8.0.171 的 JavaFX API 加载 FXML 文档 然后我去了oracle网站并更新了jre直到java 8.0的171更新

【讨论】:

以上是关于JavaFX FXML API 版本警告的主要内容,如果未能解决你的问题,请参考以下文章

JavaFx,@FXML 的问题

JavaFX 在没有控制器的 fxml 中包含 fxml

javafx 8 兼容性问题 - FXML 静态字段

javafx 8 兼容性问题 - FXML 静态字段

无法在 JavaFX 中加载 FXML 文件

通过代码关闭 fxml 窗口,javafx