簡體   English   中英

TornadoFX 找不到 JavaFx

[英]TornadoFX not finding JavaFx

我正在使用TornadoFx嘗試我的第一個應用程序,所以我從以下代碼開始:

package no.tornado.fxsample.workspace

import javafx.application.Application
import tornadofx.*

fun main(args: Array<String>) = launch<MyApp>(args)

class MyApp: App(MyView::class)

class MyView: View() {
    override val root = VBox()
    init {
        with(root) {
        this += Button("Press Me")
        this += Label("Waiting")
        }
    }
}

但顯然它充滿了錯誤,並且無法找到 JavaFX

我的gradle.build是:

// set up the kotlin-gradle plugin
buildscript {
    ext.kotlin_version = '1.1.60'
    repositories {
       mavenLocal()    //    mavenCentral()
    }
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

// apply the kotlin-gradle plugin
apply plugin: "kotlin"

// add kotlin-stdlib dependencies.
repositories {
    mavenLocal()  // mavenCentral()
}

dependencies {
    //dependencies from a remote repositor
    compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    compile "no.tornado:tornadofx:1.7.12"
}

jar {
    manifest {
        //Define mainClassName as: '[your_namespace].[your_arctifact]Kt'
        attributes ('Main-Class': 'MyAppKt', "Implementation-Title": "Gradle",
                   "Implementation-Version": 1)
    }
    // NEW LINE HERE !!!
    from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
}

sourceSets {
    main.kotlin.srcDirs += 'src/kotlin'
    main.resources.srcDirs += 'src/resources'
}

kotlin {
    experimental.coroutines 'enable'
}

compileKotlin {
    kotlinOptions.jvmTarget= 1.8  // optional, Minimum jvmTarget of 1.8 needed since Kotlin 1.1
    kotlinOptions.suppressWarnings = true
}

在此處輸入圖片說明

也許您正在使用默認情況下沒有 JavaFX 的 OpenJDK? 我強烈建議您安裝 Oracle JDK 8。

您的代碼使用了一些嚴重過時的語法。 由於您是新用戶,我懷疑我們有一些過時的代碼示例 - 您能告訴我您在哪里找到這些示例嗎?

現在應該這樣寫:

class MyView : View() {
    override val root = vbox {
        button("Press me")
        label("Waiting")
    }
}

這是另一種選擇,我只是將其寫為答案,以防有人對此感興趣。 下面的代碼現在與我一起使用command lineMS VS Code

main.kt

import javafx.*
import javafx.application.Application
import javafx.scene.control.Button
import javafx.scene.layout.VBox
import tornadofx.*
import javafx.scene.control.Label

class MyApp: App(MyView::class)

class MyView : View() {
    override val root = vbox {
        button("Press me")
        label("Waiting")
    }
}

fun main(args: Array<String>) {
    Application.launch(MyApp::class.java, *args)
}

build.gradle

// set up the kotlin-gradle plugin
buildscript {
    ext.kotlin_version = '1.1.60'
    repositories {
       mavenLocal()    //    mavenCentral()
    }
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

// apply the kotlin-gradle plugin
apply plugin: "kotlin"

// add kotlin-stdlib dependencies.
repositories {
    mavenLocal()  // mavenCentral()
}

dependencies {
    //dependencies from a remote repositor
    compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    compile "no.tornado:tornadofx:1.7.12"
}


jar {
    manifest {
        //Define mainClassName as: '[your_namespace].[your_arctifact]Kt'
        attributes ('Main-Class': 'MainKt', "Implementation-Title": "Gradle",
                   "Implementation-Version": 1)
    }
    // NEW LINE HERE !!!
    from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
}


sourceSets {
    main.kotlin.srcDirs += 'src/kotlin'
    main.resources.srcDirs += 'src/resources'
}

kotlin {
    experimental.coroutines 'enable'
}

compileKotlin {
    kotlinOptions.jvmTarget= 1.8  // optional, Minimum jvmTarget of 1.8 needed since Kotlin 1.1
    kotlinOptions.suppressWarnings = true
}

輸出是: 在此處輸入圖片說明

但是在 Intellij IDEA 中仍然充滿錯誤,如下所示: 在此處輸入圖片說明

參考這個它通過添加這個插件與 Intellij Idea 一起工作:

apply from: "http://dl.bintray.com/content/shemnon/javafx-gradle/8.1.1/javafx.plugin"

不幸的是,此插件不再維護:(

更奇怪的是,這個代碼只需要一次,之后可以刪除,沒有任何錯誤,可能是在某處兌現了!!

在此處輸入圖片說明

版本 gradle 6.4 版本 kotlin 1.3.72 版本 tornadofx 1.7.20 版本 JDK 14

build.gradle 添加

plugins {
    id 'org.openjfx.javafxplugin' version '0.0.8'
}
javafx {
    version = "14"
    modules = [ 'javafx.controls', 'javafx.fxml' ]
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM