在Windows中从命令行执行java程序失败

时间:2012-10-08 00:18:35

标签: java exception cmd javac noclassdeffounderror

我正在尝试从Windows的命令行运行一个非常简单的一个类“Hello World”程序。

.java文件位于“C:\ Users \ UserName \ Desktop \ direcName”。该软件包为deem,类名为test

我可以cd到目录并使用javac test.java从那里编译它,并且完全正常。但是,当我尝试使用以下命令运行它时:

java testjava -classpath directory testjava -cp . test 它会在线程main java.lang.NoClassDefFoundError: test (wrong name: deem/test)中抛出“异常。

如果我使用java deem.test,则说:Error, could not find or load main class deem.main

如何修复异常并让我的程序运行?

由于

2 个答案:

答案 0 :(得分:5)

这是从命令行运行Java程序的“常见初学者错误”的变体。

  

java test或java -classpath目录test或java -cp。测试它抛出“线程主java.lang.NoClassDefFoundError:test中的异常(错误的名称:deem / test)。

JVM实际上告诉你在搜索路径上找到了“test.class”,但是当它读取类文件时,它得出的结论是文件 应该是“./deem/ test.class“或”directory / deem / test.class“...取决于你实际使用的”-cp“/” - classpath“参数

  

如果我使用java deem.test它会说:错误,无法找到或加载主类deem.main

现在告诉你它找不到“deem / main.class”。

请注意,现在告诉它要查找名为“deem.main”的类而不是“test”或“deem.test”。 (或者你可能只是在那里错误地转录了一些东西。)

规则非常简单:

  1. 您必须将完全限定的类名称赋予java作为选项后的第一个参数。 (简单类名。“.class”文件名。入口点方法的名称。)
  2. 您必须指定类路径,以便java命令可以
    • 将类名映射到类文件的相对路径名(例如foo.bar.baz.MyClass映射到foo/bar/baz/MyClass.class)...
    • 然后针对其中一个类路径条目解析该相对路径;例如如果.是类路径,则为./foo/bar/baz/MyClass.class
  3. 该类必须具有所需的public static void main(String[])入口点方法。
  4. 所以 IF ......

    1. 班级的完全限定班级名称为deem.test;即test类位于包deem AND
    2. 相应的类文件位于./deem/test.class AND
    3. 它具有所需的入口点方法 AND
    4. 测试应用程序不依赖于您的其他类或第三方库...
    5. 然后 java -cp . deem.test应该有用。

答案 1 :(得分:1)

如果该类位于“deem”包中,那么您需要包含这样的包名。

java deem.test

这应该有效。