运行java程序时出错:java.lang.NoClassDefFoundError

时间:2011-10-05 22:19:57

标签: java exception command-line noclassdeffounderror

我有以下的包结构,我试图运行一个示例hibernate应用程序

源文件:/home/chander/workspace/HibernateApp/src/com/hib/TranslateSQL.java

我目前的目录:

/home/chander/workspace/HibernateApp/src

编译: $JAVA_HOME/bin/javac com/hib/*.java ---这成功运行

执行命令 $JAVA_HOME/bin/java com/hib/TranslateSQL给出以下例外:

Exception in thread "main" java.lang.NoClassDefFoundError: TranslateSQL (wrong name: com/hib/TranslateSQL)
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:616)
    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:307)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:315)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
Could not find the main class: TranslateSQL.  Program will exit.

我设置了classpath和JAVA_HOME。我似乎没有发现我的命令有什么问题。

还尝试了以下命令:

$JAVA_HOME/bin/java com.hib.TranslateSQL

得到以下例外:

Exception in thread "main" java.lang.NoClassDefFoundError: com/hib/TranslateSQL
Caused by: java.lang.ClassNotFoundException: com.hib.TranslateSQL
    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:307)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:315)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
Could not find the main class: com.hib.TranslateSQL.  Program will exit.

2 个答案:

答案 0 :(得分:2)

您错误地指定了类名。而不是:

$JAVA_HOME/bin/java com/hib/TranslateSQL

你应该跑步:

$JAVA_HOME/bin/java com.hib.TranslateSQL

您应该在目录结构({{1)中指定一个包(com.hib)内的类名,而不是文件名 }}。)

编辑:如果这不起作用,您的类路径可能设置不正确。您可以在命令行中指定它:

com/hib

答案 1 :(得分:0)

我这样做是为了工作:

cd  /home/chander/workspace/HibernateApp/src/com/hib/

export CLASSPATH=$CLASSPATH:/home/chander/workspace/HibernateApp/src/

$JAVA_HOME/bin/java com.hib.TranslateSQL