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

JDK11+ControlsFX11.0.0使用TextFields.bindAutoCompletion遇非法访问错误求助

问题分析与解决方案

当前配置的问题

你添加的--add-exports javafx.base/com.sun.javafx.event=ALL-UNNAMED配置不正确,原因是ControlsFX 11是命名模块(模块名org.controlsfx.controls),而ALL-UNNAMED指代未模块化的代码,这条导出规则无法作用于命名模块,所以异常仍然存在。

正确的解决步骤

  1. 修改VM参数的导出目标
    将javafx-maven-plugin中的--add-exports参数目标改为ControlsFX的模块名,同时ControlsFX 11还需要访问JavaFX的其他内部API,建议一并添加以下参数:

    <plugin>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-maven-plugin</artifactId>
        <version>0.0.8</version>
        <configuration>
            <mainClass>hu.infokristaly.jpasswordprotector.Main</mainClass>
            <options>
                <option>--add-exports javafx.base/com.sun.javafx.event=org.controlsfx.controls</option>
                <option>--add-exports javafx.controls/com.sun.javafx.scene.control.behavior=org.controlsfx.controls</option>
                <option>--add-exports javafx.controls/com.sun.javafx.scene.control=org.controlsfx.controls</option>
            </options>
        </configuration>
    </plugin>
    
  2. 确认module-info.java配置
    你的module-info.java配置是正确的,已经通过requires org.controlsfx.controls声明了对ControlsFX模块的依赖,无需修改。

原理说明

Java 9引入的模块系统默认隐藏com.sun开头的内部API,只有通过--add-exports参数明确指定将内部包导出给特定的命名模块,该模块才能访问这些API。ControlsFX作为命名模块,必须直接指定其模块名作为导出目标,而非ALL-UNNAMED。

内容的提问来源于stack exchange,提问作者Papp Zoltán

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 02:50:40