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

如何解决JDK21环境下Java 3D无法运行的问题

解决Java 3D应用在JDK21下运行失败的问题

错误原因

你遇到的IllegalAccessError本质是JDK 9及以上引入的**模块系统(JPMS)**限制了对Java核心模块内部API的访问。旧版Java 3D 1.5.2直接调用了sun.awt.Win32GraphicsConfig这个内部类,而java.desktop模块默认不会对外导出sun.awt这类内部包给未命名模块(你的应用因为依赖未模块化的旧Java3D jar,属于未命名模块)。

解决方案

方案1:使用适配JPMS的Java 3D新版本(推荐)

放弃老旧的1.5.2版本,改用支持模块系统的Java 3D维护版本(例如1.6.0及之后的官方更新版)。这类版本已适配JPMS,无需手动复制dll或jar到JDK目录:

  • 若用构建工具(Maven/Gradle),直接添加对应依赖;
  • 手动下载的话,确保获取的j3dcore.jar、j3dutils.jar、vecmath.jar包含module-info.class文件,通过类路径(-cp)引入即可。

方案2:通过JVM参数临时开放内部API(应急方案)

如果暂时无法升级Java 3D,可通过JVM参数允许未命名模块访问所需内部包,同时适配JDK21的目录变化:

  1. 不再复制jar到JDK扩展目录:JDK9+已废弃lib/ext扩展机制,改用-cp参数指定类路径;
  2. 指定本地库路径:无需复制dll到JDK目录,用-Djava.library.path指定Java3D的dll所在目录;
  3. 添加模块导出参数:允许未命名模块访问sun.awt相关内部包。

完整运行命令示例:

java -cp "C:\Program Files (x86)\Java\Java3D\1.5.2\lib\ext\j3dcore.jar;C:\Program Files (x86)\Java\Java3D\1.5.2\lib\ext\j3dutils.jar;C:\Program Files (x86)\Java\Java3D\1.5.2\lib\ext\vecmath.jar;." ^
-Djava.library.path="C:\Program Files (x86)\Java\Java3D\1.5.2\bin" ^
--add-exports java.desktop/sun.awt=ALL-UNNAMED ^
--add-exports java.desktop/sun.awt.windows=ALL-UNNAMED ^
Java_3D_Pick

注意:此方案仅作临时应急,未来JDK版本可能彻底移除这些内部API,导致该方法失效。

方案3:修改代码适配(不推荐)

旧Java 3D的核心渲染逻辑深度依赖sun.awt内部类,修改代码适配JPMS的工作量极大,远不如直接升级Java 3D版本高效。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 10:38:10