0

我知道这个问题问得够多了。以前在这里的次数,但不幸的是我仍然无法找到解决方案。我正在尝试从命令提示符(没有 Eclipse)运行 swt-java 项目并得到以下异常:

Exception in thread "main" java.lang.NoClassDefFoundError: com/beans/MyBean
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
    at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:169)
    at org.hibernate.util.ReflectHelper.classForName(ReflectHelper.java:100)
    at org.hibernate.util.ReflectHelper.reflectedPropertyClass(ReflectHelper.java:70)
    at org.hibernate.mapping.SimpleValue.setTypeUsingReflection(SimpleValue.java:276)
    at org.hibernate.cfg.HbmBinder.bindSimpleId(HbmBinder.java:401)
    at org.hibernate.cfg.HbmBinder.bindRootPersistentClassCommonValues(HbmBinder.java:334)
    at org.hibernate.cfg.HbmBinder.bindRootClass(HbmBinder.java:273)
    at org.hibernate.cfg.HbmBinder.bindRoot(HbmBinder.java:144)
    at org.hibernate.cfg.Configuration.add(Configuration.java:669)
    at org.hibernate.cfg.Configuration.addInputStream(Configuration.java:504)
    at org.hibernate.cfg.Configuration.addResource(Configuration.java:566)
    at org.hibernate.cfg.Configuration.parseMappingElement(Configuration.java:1587)
    at org.hibernate.cfg.Configuration.parseSessionFactory(Configuration.java:1555)
    at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1534)
    at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1508)
    at org.hibernate.cfg.Configuration.configure(Configuration.java:1428)
    at com.facadeimplementation.hibernate.util.HibernateFactory.configureSessionFactory(HibernateFactory.java:83)
    at com.facadeimplementation.model.dao.MyDao.<init>(MyDao.java:23)
    at com.facadeimplementation.model.dao.MappingDao.<init>(MappingDao.java:23)
    at com.ui.MainForm.<init>(MainForm.java:45)
    at com.ui.MainForm$1.run(MainForm.java:77)
    at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
    at com.ui.MainForm.main(MainForm.java:74)
Caused by: java.lang.ClassNotFoundException: com.beans.MyBean
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    ... 37 more

我能够在 Eclipse 中成功运行这个项目。

MyBean.java包含在一个 Jar 中。我在项目中使用了很多 POJO,因此无法直接使用它们,而不是在 jar 中使用它们。

我已经关注了很多链接来解决这个问题。他们之中有一些是 :

NoClassDefFoundError 和 ClassNotFoundException 之间的原因和区别是什么?

http://javaeesupportpatterns.blogspot.in/2012/06/javalangnoclassdeffounderror-how-to.html

http://javarevisited.blogspot.in/2011/06/noclassdeffounderror-exception-in.html

谁能帮我?

编辑

我正在尝试使用以下命令运行我的 Java 应用程序:

java -classpath .:swt.jar:mybeans.jar:(other necessary jars separated by :) com.ui.MainForm.java
4

2 回答 2

0

确保可以com/beans/MyBean.class在 JAR 文件中找到您的 bean。即,当您使用 列出 JAR 文件的内容时jar tf,必须有一行内容为

com/beans/MyBean.class

一定是这样的。还要确保您确实将 JAR 添加到类路径中。您可以使用此代码检查:

URL url = getClass().getClassLoader().getResource("com/beans/MyBean.class"),

如果urlnull,则该类不在运行时类路径上。

于 2012-10-15T11:48:13.863 回答
0

错误的起点在

com.facadeimplementation.hibernate.util.HibernateFactory.configureSessionFactory(HibernateFactory.java:83)

然后你得到了。

Exception in thread "main" java.lang.NoClassDefFoundError: com/beans/MyBean

您有可能在 POJO 中使用第三方依赖项,并且该 API 正在引用其他一些 API。如果它也从 CLASSPATH 中丢失。您可能会收到此错误。

只需检查您在 POJO 中使用的第三方依赖项是否com/beans/MyBean在 CLASSPATH 中。

正如您所提到的,它正在从 Eclipse 中运行查找。

当您从 CMD 运行时,eclipse CLASSPATH 中的所有.jar文件是否也在 CLASSPATH 中。

可能是您列出了该 POJO 中使用的 API。这可能更有帮助。

于 2012-10-18T08:25:24.517 回答