【问题标题】:File has been compiled by a more recent version of the Java Runtime error SceneBuilder文件已由 Java 运行时错误 SceneBuilder 的更新版本编译
【发布时间】:2020-08-28 13:35:06
【问题描述】:

我使用 JLink + JPackage 将 JavaFX 应用程序构建成一个独立的应用程序。我正在使用 JDK 14。但是,当我尝试在 IntelliJ 的 Scenebuilder 中打开我的一个 FXML 文件时,我收到了这个错误:

File has been compiled by a more recent version of the Java Runtime (class file version 58.0), this version of the Java Runtime only recognizes class file versions up to 55.0.

为了在开发环境中运行应用程序,我使用mvn clean javafx:run

当我检查 IDE 的编译器设置时,JDK 正确设置为 14,JAVA_HOME 变量也是如此,如下所示。我该如何解决这个问题?

PS C:\dev> java --version
openjdk 14.0.2 2020-07-14
OpenJDK Runtime Environment (build 14.0.2+12-46)
OpenJDK 64-Bit Server VM (build 14.0.2+12-46, mixed mode, sharing)

【问题讨论】:

  • 你能澄清一下吗?应用程序运行,但在 SceneBuilder 中打开 FXML 文件时出现此错误?您可以自己打开 SceneBuilder(即只运行它,而不打开文件)吗?这听起来就像您尝试使用错误的 JDK 运行 SceneBuilder。
  • 是的,应用程序运行没有问题,我只在尝试使用 SceneBuilder 编辑它时收到错误消息。 SceneBuilder 本身也可以正常工作,我什至可以编辑新创建的 FXML 文件 - 我只是无法编辑已经编译的文件。
  • 在我的 Mac 上(不确定如何在 Windows 上进行等效操作),我可以右键单击 SceneBuilder 应用程序并选择“显示包内容”,它会显示应用程序的结构。如果我在那里挖掘(/Contents/Plugins/Java.runtime/Contents/Home/bin,尽管这取决于平台)我可以找到java 可执行文件,并从那里验证 SceneBuilder 是否正在使用 Java 11 运行。如果您有自定义组件,我假设 SceneBuilder 会加载相关的类,这将导致您看到的错误,原因很明显。
  • 所以...我想,尝试自己构建 SceneBuilder (github.com/gluonhq/scenebuilder) 以便可以在 JDK14 下运行它?这似乎有点像大锤解决方案......
  • 由于您熟悉jpackage,如果您可以从SceneBuilder exe中提取jar文件,您可以使用JDK14和JavaFX 14重新打包并创建一个新的SceneBuilder exe。然后将 IntelliJ 配置为指向重新打包的 SceneBuilder。不过,似乎应该有一个更简单的解决方案......

标签: java intellij-idea javafx scenebuilder


【解决方案1】:

我会说问题出在您的自定义组件上。您可能已经使用 Java 14 编译了它们并将生成的 jar 放入 SceneBuilder。因此,每次加载使用这些组件之一的 FXML 文件时,您都会收到该错误消息,因为组件的类文件版本比 SceneBuilder 本身的版本年轻。出于兼容性原因,无论如何编译您的组件与目标 11 是一个好主意。您可以使用 Java 14 编译器做到这一点。这将总体上提高兼容性并解决您手头的问题。

【讨论】:

    【解决方案2】:

    我认为(我不是 100% 确定,但这是有道理的)对此有 2 个答案...

    1. 您的 intellij 使用的是较旧版本的 java(范围从 6 到 13)。因此,您需要允许 intellij 使用更新版本的 java (JDK14)。
    2. 使用旧版本的 java 构建您的应用程序,当然您可能需要更改一些功能,因为 java 版本旧。

    【讨论】:

    • 我认为 1. 不太正确。 IntelliJ 启动 SceneBuilder,这是一个单独的 Java 应用程序,它捆绑了一个 JVM(显示为一个本地应用程序)。问题是捆绑在 SceneBuilder(不是 IntelliJ)中的 Java 版本。 (AFAICT 这将需要重新打包 SceneBuilder,使用 jpackage 或类似的。)
    猜你喜欢
    • 2018-06-01
    • 2022-07-25
    • 1970-01-01
    • 2020-01-27
    • 2022-01-23
    • 2021-12-01
    • 2018-05-07
    • 1970-01-01
    相关资源
    最近更新 更多