intellij-idea - TornadoFX 未解决的 JavaFx
问题描述
我想创建一个应该是桌面应用程序的新项目。为此,我选择了 Kotlin 语言和 TornadoFX 框架。我已经安装了TornadoFX
插件并创建了一个新的 T tornadofx-gradle-project
。Intellij 的基本设置是成功的,但我遇到了一个问题。当我想运行生成的项目时,它失败了。该项目无法解析 java fx。我已经通过网络进行了挖掘,并没有发现任何可以解决问题的方法。我在构建失败后收到的错误日志是:
有没有人面临同样的问题?我怎样才能摆脱它?
我已经安装了 JDK 11 并将其设置为构建配置,但我仍然收到问题:
java.lang.UnsupportedClassVersionError: org/openjfx/gradle/JavaFXPlugin 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
有没有改变我在中间错过了什么?
解决方案
看起来您正在使用 Java 11 或 12 运行 TornadoFX 项目。
TornadoFX插件看起来也适用于 Java 1.8,但不建议使用 Java 11+ 做什么。
从 Java 11 开始,JavaFX 不再是 JDK 的一部分。
您可以在此处阅读有关将 JavaFX 作为第三方依赖项添加到您的项目中的所有信息:https ://openjfx.io/openjfx-docs/ ,并且由于您使用的是 Gradle,因此本节将有所帮助:https ://openjfx.io /openjfx-docs/#gradle。
我刚刚安装了 Tornado 插件,并使用 JDK 12.0.1 创建了一个项目。我还更新了gradle-wrapper.properties
文件以使用 Gradle 5.3-bin,因为默认的 4.4 不适用于 Java 11+。
如果我运行它,我会得到同样的错误:
e: /.../src/main/kotlin/com/example/demo/app/Styles.kt: (3, 8): \
Unresolved reference: javafx
e: /.../src/main/kotlin/com/example/demo/app/Styles.kt: (18, 13): \
Cannot access class 'javafx.scene.text.FontWeight'. Check your module classpath for missing or conflicting dependencies
...
基本上这些错误表明没有找到 JavaFX。Tornado 插件没有预料到这一点。
解决方案
有一个简单的解决方案可以完成这项工作:将 JavaFX gradle 插件添加到构建中,以便它处理 JavaFX 部分。
根据插件的存储库,您需要做的就是编辑 build.gradle 文件并添加:
buildscript {
ext.kotlin_version = "1.2.60"
ext.tornadofx_version = "1.7.17"
ext.junit_version = "5.1.0"
repositories {
mavenLocal()
mavenCentral()
maven {
setUrl("https://plugins.gradle.org/m2/")
}
}
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath "org.junit.platform:junit-platform-gradle-plugin:1.1.0"
// Add JavaFX plugin:
classpath 'org.openjfx:javafx-plugin:0.0.7'
}
}
apply plugin: "kotlin"
apply plugin: "application"
apply plugin: "org.junit.platform.gradle.plugin"
// Apply JavaFX plugin:
apply plugin: 'org.openjfx.javafxplugin'
// Add the JavaFX version and required modules:
javafx {
version = "12.0.1"
modules = [ 'javafx.controls', 'javafx.fxml' ]
}
...
就是这样,刷新您的项目,IDE 应该能够识别所有 JavaFX 类。
如果您修改默认值MainView.kt
,例如:
class MainView : View("Hello TornadoFX \n with JavaFX "
+ System.getProperty("javafx.version")) {
override val root = hbox {
label(title) {
addClass(Styles.heading)
}
}
}
你应该能够运行它:
推荐阅读
- python - 如何使用当前设置获得 JSON 文件?
- python - Python 无法访问列表
- android - 如果我的应用程序在后台,为什么 Android 操作系统不会创建 singleTop 活动的新实例?
- aws-elasticsearch - 两个 AWS ES 集群/域之间的 Amazon Elasticsearch 索引复制?
- javascript - 如何将数据从一个 api 端点传递到 reactjs 中的另一个 api 端点
- python - 如何使用 Pandas 数据框显示如下输出?
- python - 无法使用实现代理的请求从有问题的网页中获取标题
- ruby-on-rails - timecop.travel 测试返回 false 而不是 true - rails
- c++ - 使用 char* / wchar_t* MACRO 专门化成员
- codeigniter - 我对这篇文章的理解是否正确?我得到以下代码的输出 12,它被声明为错误