【问题标题】:Use SceneBuilder with JavaFX 11 in IDEA在 IDEA 中使用带有 JavaFX 11 的 SceneBuilder
【发布时间】:2019-04-29 19:16:02
【问题描述】:

我正在使用 IDEA(使用 OpenJDK 11),并且正在尝试使用 SceneBuilder 来显示我的 FXML 文件。它可以工作,除非我使用继承的 JavaFX 组件,例如:

public class MyLabel extends Label {
    public MyLabel(){
        super();
        setText("42");
    }
}

我总是得到一个错误:

java.lang.UnsupportedClassVersionError: sample/MyLabel has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0

所以我查看了我的 IDEA 安装文件夹(C:\Users\me\AppData\Local\JetBrains\Toolbox\apps\IDEA-C\ch-0\xxx.xxxx.xxx\plugins\javaFX\lib),我看到 IDEA 正在使用 SceneBuilder 的 Java 8 版本(“SceneBuilderKit-8.2.0.jar”)。

我想知道如何在 IDEA 中使用 Java 11 version。我已经尝试在参数中填充SceneBuilder路径,但是没有成功。

【问题讨论】:

    标签: intellij-idea javafx scenebuilder javafx-11


    【解决方案1】:

    如果 IntelliJ 的嵌入式 Scene Builder 版本是 8.2,那么您不能指望它可以“渲染”其类路径中为大于 8(52 级)的 Java 版本编译的任何类。

    嵌入式 Scene Builder 只是另一个运行的 Java 应用程序,基本上是运行在 IntelliJ 编辑器之上的 Swing 组件中的 JavaFX 应用程序。

    Java 8

    为了处理使用内置控件的常规 FXML 文件,Scene Builder 使用 JDK 将 jfxrt.jar 加载到类路径。

    如果您使用 Java 8 创建自己的自定义控件(此question 有一个很好的示例说明如何执行此操作),并且您在尝试 Scene Builder 时不编译项目你会得到一个ClassNotFoundException,因为控件不在类路径中,Scene Builder 不知道如何处理它。

    但是在您构建项目之后,生成的类也会添加到类路径中,并且您可以看到呈现的控件。

    Java 11

    如您所知,当您使用 Java 11 创建自定义控件时,没有更多的jfxrt.jar

    按照入门 docs,您需要将 JavaFX 11 SDK 添加到您的项目中,以及 VM 选项

    --module-path ${PATH_TO_FX} --add-modules=javafx.controls,javafx.fxml
    

    为了运行项目。

    如果您有一个常规 FXML 文件,只有内置控件,然后转到嵌入式场景构建器,它将加载并渲染它。这是为什么?因为它可能使用的是IntelliJ附带的内部JDK 1.8,所以FXML文件(包含纯xml,不是java文件!)可以被(Java 8)FXMLLoader解析并渲染。

    但是如果你尝试你的自定义控件,在构建项目之后,你会得到你提到的异常:

    因为你是用 Java 11 编译的,现在级别是 55。

    有什么办法让它工作吗?如前所述,您需要做的就是将控件加载到类路径中,但级别为 52。

    所以您需要做的就是将项目的目标级别设置为 1.8,在项目结构 -> 项目 -> 项目语言级别

    现在再次构建您的项目,您将能够使用嵌入式 Scene Builder 看到自定义控件:

    由于您的项目现在与 Java 8 兼容,您可以验证您将能够运行:

    /path-to-java-8/java -jar out/production/Custom_jar/Custom.jar
    

    无论如何,如果你不想要那个级别,你当然可以保留 Java 11 并使用独立的Scene Builder 11

    【讨论】:

      【解决方案2】:

      除了 José Pereda 的回答,

      在 Maven 项目中,您需要将 build > plugins > maven-compiler-plugin > configuration > release 设置为 8,而不是 11

      【讨论】:

        【解决方案3】:

        只需尝试在适用于 Java 11 的最新 EAP 2019.3 版本中安装插件“选择运行时”,然后按 CTRL-SHIFT-A 选择选择运行时和最新的 jbrsdk-8。 在您的项目结构中选择 java 11,但兼容 java 8。

        Also use jfoenix 8.0.9 in your project to run scene builder. 要运行程序,请使用 jfoenix 9.0.9。

        【讨论】:

          猜你喜欢
          • 2018-05-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-06-18
          • 2019-03-03
          • 2019-02-22
          • 2020-01-21
          相关资源
          最近更新 更多