1

我查看了其他 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)
4

5 回答 5

2

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

此外,如果您运行$ java tool.HelloWorld,那么 java 将尝试查找该文件tool/HelloWorld.class,因此您需要确保您的工作目录是包含 tool/的目录,而不是 tool/它本身。

于 2012-05-22T10:32:19.327 回答
0

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

javac MyClass.java

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

java MaClass.class

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

java MyClass
于 2012-05-22T10:02:20.513 回答
0

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

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

于 2012-05-22T10:03:56.300 回答
0

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

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

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

更新 看看类路径定义:维基百科

于 2012-05-22T10:17:32.500 回答
0

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

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
于 2013-11-26T22:48:44.980 回答