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

运行JAR包时出现java.lang.NoClassDefFoundError: sun/reflect/Reflection异常求助

问题描述

使用Eclipse构建了配置好主类的JAR包,在Windows命令行执行以下命令时:

java -Xms512m -Xmx1024m -jar foo.jar config.ini

抛出如下异常:

Exception in thread "main" java.lang.NoClassDefFoundError: sun/reflect/Reflection
        at com.jidesoft.plaf.UIDefaultsLookup.getCallerClassLoader(Unknown Source)
        at com.jidesoft.plaf.UIDefaultsLookup.get(Unknown Source)
        at com.jidesoft.plaf.vsnet.VsnetWindowsUtils.initComponentDefaultsWithMenu(Unknown Source)
        at com.jidesoft.plaf.LookAndFeelFactory.installJideExtension(Unknown Source)
        at com.jidesoft.plaf.LookAndFeelFactory.installJideExtension(Unknown Source)
        at com.jidesoft.plaf.LookAndFeelFactory.installJideExtension(Unknown Source)
        at com.jidesoft.swing.JideButton.updateUI(Unknown Source)
        at java.desktop/javax.swing.AbstractButton.init(AbstractButton.java:2136)
        at java.desktop/javax.swing.JButton.<init>(JButton.java:131)
        at java.desktop/javax.swing.JButton.<init>(JButton.java:85)
        at com.jidesoft.swing.JideButton.<init>(Unknown Source)
        at com.jidesoft.swing.JideButton.<init>(Unknown Source)
        at ro.sync.ui.application.lb.<init>(Unknown Source)
        at ro.sync.exml.m.d.<init>(Unknown Source)
        at ro.sync.exml.m.d.dqe(Unknown Source)
        at ro.sync.exml.m.c.<init>(Unknown Source)
        at ro.sync.ecss.extensions.api.component.AuthorComponentFactory$2.<init>(Unknown Source)
        at ro.sync.ecss.extensions.api.component.AuthorComponentFactory.init(Unknown Source)
        at ro.sync.ecss.extensions.api.component.AuthorComponentFactory.init(Unknown Source)
        at ro.sync.ecss.samples.AuthorComponentSample.<init>(AuthorComponentSample.java:311)
        at ro.sync.ecss.samples.AuthorComponentSample.main(AuthorComponentSample.java:545)
Caused by: java.lang.ClassNotFoundException: sun.reflect.Reflection
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:602)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
        ... 21 more
原因分析

sun.reflect.Reflection是Sun/Oracle JDK的内部API,从Java 9开始,模块化系统默认限制了对这类内部API的访问。当前使用的JIDE组件依赖该内部类,而运行环境是Java 9及以上版本,导致类加载失败。

解决方案
  • 降级Java运行环境到Java 8:Java 8中sun.reflect.Reflection属于公开可访问的类,直接使用Java 8执行JAR包即可解决异常。
  • 添加JVM参数开放内部API访问(临时方案):如果必须使用Java 9+,在启动命令中添加--add-exports参数,修改后的命令如下:
    java -Xms512m -Xmx1024m --add-exports java.base/sun.reflect=ALL-UNNAMED -jar foo.jar config.ini
    
    注意:该方案仅为临时 workaround,内部API可能在后续Java版本中被移除,不建议长期依赖。
  • 升级JIDE组件版本:查找并使用支持Java 9及以上版本的JIDE库,替换项目中的旧依赖后重新打包JAR,从根源解决兼容性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 20:36:38