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_60
和JRE
版本是1.8.0_65
。
所以你应该为他们两个使用相同的版本。
您可以分别在命令提示符上查看您当前的JDK
和JRE
版本,
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 版本警告的主要内容,如果未能解决你的问题,请参考以下文章