首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TornadoFX未解析JavaFx

TornadoFX未解析JavaFx
EN

Stack Overflow用户
提问于 2019-06-16 17:25:53
回答 3查看 5.5K关注 0票数 4

我想要创建一个应该是桌面应用程序的新项目。为此,我选择了Kotlin语言和TornadoFX框架。我已经安装了TornadoFX插件并创建了一个新的Ttornadofx-gradle-project。Intellij的基本设置是成功的,但我遇到了一个问题。当我想运行生成的项目时,它失败了。该项目无法解决java。我在网上挖了一遍,发现没有任何东西能解决这个问题。在生成失败后收到的错误日志是:

有没有人面临同样的问题?我怎么才能摆脱它?

我已经安装了JDK 11并将其设置为构建配置,我仍然收到了这个问题:

代码语言:javascript
复制
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

有什么变化是我在中间遗漏了什么吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-06-16 21:03:56

看起来您正在使用Java11或12运行TornadoFX项目。

它似乎也是针对Java1.8的TornadoFX 插件,但不建议如何使用Java11+。

因为Java11,JavaFX不再是JDK的一部分。

您可以在这里阅读关于将JavaFX作为第三方依赖项导入到项目中的所有内容:https://openjfx.io/openjfx-docs/,而且由于您正在使用Gradle,本节将对您的项目有所帮助:https://openjfx.io/openjfx-docs/#gradle

我刚刚安装了“旋风”插件,并使用JDK12.0.1创建了一个项目。我还更新了gradle-wrapper.properties文件以使用Gradle 5.3-bin,因为默认的4.4不适用于11+。

如果我运行它,我会得到同样的错误:

代码语言:javascript
复制
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。龙卷风插件没想到会这样。

溶液

有一个简单的解决方案可以实现这一点:将JavaFX gradle插件添加到构建中,因此它处理JavaFX部件。

根据插件的存储库,只需编辑build.gradle文件并添加:

代码语言:javascript
复制
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,如下所示:

代码语言:javascript
复制
class MainView : View("Hello TornadoFX \n with JavaFX " 
        + System.getProperty("javafx.version")) {
    override val root = hbox {
        label(title) {
            addClass(Styles.heading)
        }
    }
}

您应该能够运行它:

票数 8
EN

Stack Overflow用户

发布于 2020-08-13 13:47:52

这个答案适用于那些希望使用Gradle Kotlin DSL的人。

最小build.gradle.kts的一个例子

代码语言:javascript
复制
plugins {
    kotlin("jvm") version "1.4.0-rc"
    application
    id("org.openjfx.javafxplugin") version "0.0.9"
}

application { mainClassName = "com.example.MyApp" }


repositories {
    mavenCentral()
    jcenter()
    maven("https://dl.bintray.com/kotlin/kotlin-eap")
}

dependencies {
    // Kotlin standard library
    implementation(kotlin("stdlib-jdk8"))
    // TornadoFX dependency
    implementation("no.tornado:tornadofx:1.7.20")
}

// JavaJX module to include
javafx { modules = listOf("javafx.controls", "javafx.fxml", "javafx.graphics") }

// Set Kotlin/JVM target versions
tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> {
    kotlinOptions.jvmTarget = "11" // or higher
    kotlinOptions.languageVersion = "1.4"
}

// Be sure to use lates Gradle version
tasks.named<Wrapper>("wrapper") { gradleVersion = "6.6" }

有关完整的工作示例,请参阅GitHub 存储库

请注意,它也适用于JDK 13和14。

票数 1
EN

Stack Overflow用户

发布于 2019-10-08 09:56:53

在下载Kodein示例并尝试在Java11 11/12和JavaFX13下运行tornadofx示例时,我收到了此错误。

代码语言:javascript
复制
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

解决方案非常简单:我只在settings.gradle中评论另一个模块(因为错误发生在其他模块中)。不幸的是,在启动之后,应用程序在尝试编辑记录时会生成一个错误。我还没处理好呢。所以我的build.gradle.kts是这样的:

代码语言:javascript
复制
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

val kodeinVersion: String by rootProject.extra

plugins {
    kotlin("jvm")
    application
    id("org.openjfx.javafxplugin") version "0.0.8"
}

repositories {
    jcenter()
    maven(url = "https://dl.bintray.com/kodein-framework/Kodein-DI/")
}

application {
    mainClassName = "org.kodein.samples.di.tornadofx.KodeinApplication"
}

javafx {
    version = "13"
    modules = mutableListOf("javafx.controls", "javafx.fxml", "javafx.base", "javafx.media")
}

tasks.withType<KotlinCompile> {
    kotlinOptions.jvmTarget = JavaVersion.VERSION_11.toString()
}

dependencies {
    implementation(kotlin("stdlib-jdk8"))
    implementation("no.tornado:tornadofx:1.7.19")

    implementation("org.kodein.di:kodein-di-generic-jvm:$kodeinVersion")
    implementation("org.kodein.di:kodein-di-conf:$kodeinVersion")
    implementation("org.kodein.di:kodein-di-framework-tornadofx-jvm:$kodeinVersion")
}

我为这个示例创建了包含更改的叉:https://github.com/ibelozor/Kodein-Samples

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56621095

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档