【问题标题】:NoClassDefFoundError on HelloWorld programHelloWorld 程序上的 NoClassDefFoundError
【发布时间】:2012-05-22 09:52:57
【问题描述】:

我查看了其他 NoClassDefFoundError 问题,但没有找到适合我的解决方案。我正在使用 Eclipse IDE 编写程序,当我右键单击 -> 在 Eclipse 中作为 Java 应用程序运行时它运行良好,但尝试通过命令行运行它会遇到上述错误。我正在使用的 JRE 是(我认为)Java60。该程序使用运行良好的 javac HelloWorld.java 编译,然后调用 java -cp 。 HelloWorld 抛出错误。非常感谢任何有关故障排除的帮助。

代码是:

package tool;

public class HelloWorld {

public static void main(String[] args){
    System.out.println("Hello World!");
}

}

从“C:\MADtool\HostDBtoMADTool\src\tool”运行

命令行的输出是:

C:\MADtool\HostDBtoMADtool\src\tool>java -cp . HelloWorld
Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld (wrong nam
e: tool/HelloWorld)
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at java.security.SecureClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.access$100(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)

【问题讨论】:

  • 发布确切的异常堆栈跟踪和您的目录结构
  • 在此处显示您的 HelloWorld.java 文件。
  • 你能发布你的代码吗?最好先排除这一点:)
  • 你是从你的类所在的文件夹运行你的 java 命令吗?
  • 你试过“java HelloWorld”吗?

标签: eclipse java noclassdeffounderror


【解决方案1】:

执行$ java HelloWorld 将在默认包 中搜索HelloWorld 类。不存在这样的类,只有tool.HelloWorld

另外,如果你运行$ java tool.HelloWorld,那么java会尝试查找文件tool/HelloWorld.class,所以你需要确保你的工作目录是包含tool/的目录, 不是 tool/ 本身。

【讨论】:

    【解决方案2】:

    您输入包“工具”并创建一个 javac(这是正确的),但随后您尝试从该包文件夹中启动该类(有什么问题)。

    您必须先更改到 src 目录,因为类路径是相对于源文件夹的。如果你使用包(你真正应该做的)。您必须确保从正确的起始文件夹开始您的代码:

    C:\MADtool\HostDBtoMADtool\src>java -cp . HelloWorld
    

    更新 看看类路径定义:Wikipedia

    【讨论】:

    • 这帮助我让它工作!我切换到 src 目录并运行java -cp . tool/HelloWorld,它成功了!谢谢,你能告诉我为什么我做错了,这样我就可以确保我以后不会犯同样的错误?我阅读了该链接,并且可以理解它,但是我看不到目录级别如何对其进行排序。附言由于某种原因,您的右括号没有添加到链接的末尾
    • 我的回答做了一点改动。但是您应该谷歌了解有关创建 .jar 文件和构建 java 项目的更多信息。提示:搜索 antmaven
    【解决方案3】:

    根据我非常古老的命令行经验,我编译了我的 java 程序:

    javac MyClass.java
    

    然后尝试运行它解析带有扩展的编译类参数:

    java MaClass.class
    

    然后我得到这个异常。当我只解析没有扩展名的文件名时,它可以工作:

    java MyClass
    

    【讨论】:

      【解决方案4】:

      也许您的类路径中缺少一些依赖项?

      我的意思是您的 HelloWorld 类可能依赖于其他应该包含在类路径中的 jar。 Eclipse 会为您完成,但使用命令行您必须提供适当的类路径。

      【讨论】:

        【解决方案5】:

        我认为出现问题时完整的命令总是有帮助的:

        C:\MADtool\HostDBtoMADtool\src>java -cp "C:\MADtool\HostDBtoMADtool\src" tool.HelloWorld
        C:\MADtool\HostDBtoMADtool\src\tool>java -cp "C:\MADtool\HostDBtoMADtool\src" tool.HelloWorld
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-03-08
          • 1970-01-01
          • 1970-01-01
          • 2019-08-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多