You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JFoenix的JFXTextField启动报错:java.base未开放java.lang.reflect给com.jfoenix

问题

我使用IntelliJ+Gradle搭配JavaFX开发,测试JFoenix组件库时,将JFXTextField通过SceneBuilder拖入场景后应用无法启动,但JFXButton等组件可正常运行。

已做尝试:

  • 切换Java 11/17版本、SceneBuilder 15/17版本,问题未解决
  • 添加JVM参数--add-opens=java.base/java.lang.reflect=com.jfoenix,无效

我的module-info.java配置:

module test {
    requires javafx.controls;
    requires javafx.fxml;

    requires org.controlsfx.controls;
    requires org.kordamp.bootstrapfx.core;
    requires com.jfoenix;

    opens ...
    exports...
}

核心报错信息:

java.lang.reflect.InaccessibleObjectException: Unable to make boolean java.lang.reflect.AccessibleObject.setAccessible0(boolean) accessible: module java.base does not "opens java.lang.reflect" to module com.jfoenix
    at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:340)
    ...
Caused by: java.lang.NullPointerException
    at com.jfoenix/com.jfoenix.skins.JFXTextFieldSkin.updateTextPos(JFXTextFieldSkin.java:109)

Gradle构建失败提示:

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':run'.
> Process 'command 'C:\Program Files\Java\jdk-11.0.13\bin\java.exe'' finished with non-zero exit value 1
解决方案

1. 正确在Gradle中配置JVM参数

直接在run命令后追加参数通常无法被Gradle正确识别,需在构建脚本中明确配置运行时JVM参数:

Groovy DSL(build.gradle)

如果使用application插件:

application {
    mainClass.set("你的主类全限定名")
    applicationDefaultJvmArgs = [
        "--add-opens=java.base/java.lang.reflect=com.jfoenix",
        "--add-opens=java.base/java.lang.reflect.AccessibleObject=com.jfoenix"
    ]
}

如果使用JavaFX插件:

javafx {
    version = "你的JavaFX版本号"
    modules = [ 'javafx.controls', 'javafx.fxml' ]
}

tasks.withType(JavaExec) {
    jvmArgs += [
        "--add-opens=java.base/java.lang.reflect=com.jfoenix",
        "--add-opens=java.base/java.lang.reflect.AccessibleObject=com.jfoenix"
    ]
}

Kotlin DSL(build.gradle.kts)

application {
    mainClass.set("你的主类全限定名")
    applicationDefaultJvmArgs = listOf(
        "--add-opens=java.base/java.lang.reflect=com.jfoenix",
        "--add-opens=java.base/java.lang.reflect.AccessibleObject=com.jfoenix"
    )
}

// 针对JavaFX插件的配置
tasks.withType<JavaExec> {
    jvmArgs.addAll(
        listOf(
            "--add-opens=java.base/java.lang.reflect=com.jfoenix",
            "--add-opens=java.base/java.lang.reflect.AccessibleObject=com.jfoenix"
        )
    )
}

2. 验证版本兼容性

确保JFoenix版本与JavaFX版本匹配:

  • JavaFX 11对应JFoenix 9.0.10及以上版本
  • JavaFX 17可尝试JFoenix 9.0.11或最新快照版本(部分新版本仍可能存在反射依赖问题)

3. 临时替代方案(若参数配置无效)

如果上述配置后仍报错,可尝试:

  • 移除module-info.java,切换为非模块化运行模式,在Gradle中添加:
    // Groovy DSL
    modularity.inferModulePath = false
    
    // Kotlin DSL
    modularity.inferModulePath.set(false)
    

内容的提问来源于stack exchange,提问作者Enrico

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 10:30:42