【问题标题】:JavaFX module does not export to unnamed moduleJavaFX 模块不导出到未命名的模块
【发布时间】:2020-04-24 18:19:32
【问题描述】:

我正在使用 gradle(使用 Kotlin 和 TornadoFX)构建 JavaFX 应用程序。使用以下 gradle build 和 IntelliJ 构建和运行它可以正常工作,但使用应用程序插件并运行应用程序时,我收到以下错误:

Caused by: java.lang.IllegalAccessError: superinterface check failed: class de.codecentric.centerdevice.javafxsvg.SvgImageLoaderFactory (in
 unnamed module @0x591c2277) cannot access class com.sun.javafx.iio.ImageLoaderFactory (in module javafx.graphics) because module javafx.gr
aphics does not export com.sun.javafx.iio to unnamed module @0x591c2277

以下是我的 gradle 构建脚本。我该如何解决这个问题。

plugins {
    id 'org.jetbrains.kotlin.jvm' version '1.3.50'
    id 'application'
    id 'org.openjfx.javafxplugin' version '0.0.8'
}

application {
    mainClassName = 'MainKt'
}

javafx {
    version = "13"
    modules = ['javafx.controls', 'javafx.base', 'javafx.graphics']
}

repositories {
    mavenCentral()
    mavenLocal()
    jcenter()
    maven {
        url "https://plugins.gradle.org/m2/"
    }
    maven {
        url "http://4thline.org/m2"
    }
}

dependencies {
    ...
}

tasks.test {
    useJUnitPlatform()
    testLogging {
        events("passed", "skipped", "failed")
    }
}

compileKotlin {
    kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {
    kotlinOptions.jvmTarget = "1.8"
}

【问题讨论】:

  • 您是否尝试过将包的导出添加到未命名的模块中?可以在这里找到一个示例:stackoverflow.com/questions/58082298/…
  • 感谢您的回复。这个问题确实有帮助。我遇到的问题是应用程序插件需要“applicationDefaultJvmArgs”,而不是“jvmArgs”。但是,是的,对于将来需要帮助的任何人,为返回该错误的任何包添加 --add-exports。

标签: gradle kotlin javafx tornadofx


【解决方案1】:

由于我正在处理一个非模块项目并且依赖于 JavaFX 的模块,这就是我执行时导致错误的原因

> gradle run

我将以下内容附加到我的 gradle 文件中:

run {
    applicationDefaultJvmArgs = ['--add-exports=javafx.graphics/com.sun.javafx.iio=ALL-UNNAMED',
                                 '--add-exports=javafx.graphics/com.sun.javafx.iio.common=ALL-UNNAMED',
                                 '--add-exports=javafx.graphics/com.sun.javafx.scene=ALL-UNNAMED',
                                 '--add-exports=javafx.graphics/com.sun.glass.ui=ALL-UNNAMED',
    ]

    jvmArgs = ['--add-exports=javafx.graphics/com.sun.javafx.iio=ALL-UNNAMED',
               '--add-exports=javafx.graphics/com.sun.javafx.iio.common=ALL-UNNAMED',
               '--add-exports=javafx.graphics/com.sun.javafx.scene=ALL-UNNAMED',
               '--add-exports=javafx.graphics/com.sun.glass.ui=ALL-UNNAMED',
    ]
}

出现“applicationDefaultJvmArgs”的原因是应用程序 gradle 插件使用它来配置 jvm 参数而不是“jvmArgs”。

【讨论】:

  • 非常感谢您的回答!它帮助了我:)
  • 很好的答案,我花了 2 天时间寻找解决方案。
猜你喜欢
  • 2019-09-24
  • 1970-01-01
  • 2019-05-07
  • 1970-01-01
  • 2021-09-20
  • 1970-01-01
  • 2016-12-24
  • 2019-01-11
  • 1970-01-01
相关资源
最近更新 更多