Flp*_*lpe 2 javafx intellij-idea scenebuilder javafx-11
我正在使用 IDEA(使用 OpenJDK 11),并且我正在尝试使用 SceneBuilder 来显示我的 FXML 文件。它有效,除非我使用继承的 JavaFX 组件,例如:
public class MyLabel extends Label {
public MyLabel(){
super();
setText("42");
}
}
Run Code Online (Sandbox Code Playgroud)
我总是收到一个错误:
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
Run Code Online (Sandbox Code Playgroud)
所以我查看了我的 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 路径,但是没有用。
如果 IntelliJ 的嵌入式 Scene Builder 版本是 8.2,那么您不能指望它可以“渲染”为大于 8(级别 52)的 Java 版本编译的类路径中的任何类。
嵌入式场景构建器只是另一个运行的 Java 应用程序,基本上是一个嵌入在 IntelliJ 编辑器顶部的 Swing 组件中运行的 JavaFX 应用程序。
爪哇 8
为了处理使用内置控件的常规 FXML 文件,Scene Builder 使用 JDK 将 加载jfxrt.jar到类路径。
如果您使用 Java 8 创建您自己的自定义控件(这个问题有一个关于如何执行此操作的很好示例),并且您不编译该项目,则当您尝试使用 Scene Builder 时,您将获得一个ClassNotFoundException,因为该控件不在类路径,而场景生成器不知道如何处理它。
但是在您构建项目之后,生成的类也会添加到类路径中,您可以看到呈现的控件。
爪哇 11
如您所知,当您使用 Java 11 创建自定义控件时,不再有jfxrt.jar.
遵循入门指南 docs,您需要将 JavaFX 11 SDK添加到您的项目中,以及 VM 选项
--module-path ${PATH_TO_FX} --add-modules=javafx.controls,javafx.fxml
Run Code Online (Sandbox Code Playgroud)
以运行该项目。
如果您有一个普通的FXML 文件,只有内置控件,然后转到嵌入式场景生成器,它将加载并渲染它。这是为什么?因为它可能使用 IntelliJ 附带的内部 JDK 1.8,所以 FXML 文件(包含纯 xml,不是 java 文件!)可以被(Java 8)解析FXMLLoader并呈现。
但是如果你尝试你的自定义控件,在构建项目后,你会得到你提到的异常:
因为你是用 Java 11 编译的,现在级别是 55。
有没有办法让它工作?如前所述,您需要做的就是将控件加载到类路径中,但级别为 52。
所以你需要做的就是将项目的目标级别设置为 1.8,在项目结构 -> 项目 -> 项目语言级别
现在再次构建您的项目,您将能够看到带有嵌入式场景构建器的自定义控件:
由于您的项目现在与 Java 8 兼容,您可以验证您是否能够运行:
/path-to-java-8/java -jar out/production/Custom_jar/Custom.jar
Run Code Online (Sandbox Code Playgroud)
无论如何,如果您不想要那个级别,您当然可以保留 Java 11 并使用独立的Scene Builder 11。
| 归档时间: |
|
| 查看次数: |
5090 次 |
| 最近记录: |