【问题标题】:Error in running java program: java.lang.NoClassDefFoundError运行java程序出错:java.lang.NoClassDefFoundError
【发布时间】:2011-10-05 22:19:56
【问题描述】:

我有以下包结构,我试图在其中运行示例休眠应用程序

源文件:/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.

我设置了类路径和 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.

【问题讨论】:

    标签: java exception command-line noclassdeffounderror


    【解决方案1】:

    您指定的类名不正确。而不是这个:

    $JAVA_HOME/bin/java com/hib/TranslateSQL
    

    你应该跑步了:

    $JAVA_HOME/bin/java com.hib.TranslateSQL
    

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

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

    $JAVA_HOME/bin/java -cp . com.hib.TranslateSQL
    

    【讨论】:

    • 已经试过了。获取以下异常:线程“main”中的异常 java.lang.NoClassDefFoundError: com/hib/TranslateSQL 原因:java.lang.ClassNotFoundException: com.hib.TranslateSQL at java.net.URLClassLoader$1.run(URLClassLoader.java: 202) 在 java.security.AccessController.doPrivileged(Native Method)
    • @ChanderShivdasani:总是值得说一下你试图避免我们重复的内容......将编辑。
    • @ChanderShivdasani:检查我编辑的答案的顶部 - 请澄清您是否真的在 src 目录中;目前您的javac 找不到您提到的源文件。
    • 糟糕,我犯了一个错误。我实际上在 src 目录中。我会编辑我的帖子!
    • 也尝试通过命令行提供类路径,仍然得到相同的异常。
    【解决方案2】:

    我这样做是为了让它工作:

    cd  /home/chander/workspace/HibernateApp/src/com/hib/
    
    export CLASSPATH=$CLASSPATH:/home/chander/workspace/HibernateApp/src/
    
    $JAVA_HOME/bin/java com.hib.TranslateSQL
    

    【讨论】:

    • shoudn't 是必要的 - 我的答案中的 -cp . 版本应该已经足够了,除非 CLASSPATH also 包含其他内容您需要,在这种情况下,错误消息会有所不同。您也不需要位于 src/com/hib 目录中。
    猜你喜欢
    • 2016-04-03
    • 2011-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-17
    相关资源
    最近更新 更多