我使用Ecplise构建了一个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
发布于 2022-09-01 15:42:07
如果您真的使用Java 8来运行它,您的JAR可能会运行得很好.
但是有证据表明,您实际上是在Java9或更高版本的JVM中运行代码,其中“缺失”的sun.reflect.Reflection
类已经移到了jdk.unsupported
模块中。
最简单的解决方案是只在Java 8上运行这个程序。或者,您需要找出在您的代码库(或依赖项)中使用sun.reflect.Reflection
类的位置。(看起来像是在com.jidesoft.plaf
代码中。)
Reflection
正在做的事情.而不依赖内部API。这可能有助于您解决jidesoft代码中(显然)的jidesoft兼容性问题。
恐怕,我无法告诉您如何构建和运行Java 9版本的代码。如果您很难理解,我的建议是在Java 8上运行您的应用程序。
最后,jide问题跟踪器中有一些东西表明,这段代码不太可能在未来得到更多的“爱”。特别是,对于解决代码库对JDK内部API的依赖所引起的各种问题,人们似乎没有任何热情。随着Java团队关闭对这些API的访问,这将越来越成问题。因此,我建议:
https://stackoverflow.com/questions/73568533
复制相似问题