2

我正在使用 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 版本。我已经尝试在参数中填充 SceneBuilder 路径,但没有成功。

4

3 回答 3

5

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

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

爪哇 8

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

如果您使用 Java 8 创建自己的自定义控件(此问题有一个很好的示例说明如何执行此操作),并且您没有编译项目,当您尝试 Scene Builder 时,您将得到一个ClassNotFoundException,因为该控件不在classpath,而 Scene Builder 不知道如何处理它。

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

爪哇 11

如您所知,当您使用 Java 11 创建自定义控件时,不再有jfxrt.jar.

按照入门文档,您需要将 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,在项目结构 -> 项目 -> 项目语言级别

1.8级

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

具有自定义控件的场景生成器

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

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

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

于 2018-11-28T09:45:48.597 回答
0

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

还要在您的项目中使用 jfoenix 8.0.9 来运行场景构建器。 要运行程序,请使用 jfoenix 9.0.9。

于 2019-10-10T21:53:10.300 回答
0

除了何塞佩雷达的回答,

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

于 2019-06-17T16:23:42.593 回答