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

poe*_*ons 1 java cmd exception javac noclassdeffounderror

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

.java文件位于"C:\ Users\UserName\Desktop\direcName".包是deem,类名是test.

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

java test或者java -classpath directory test还是java -cp . test 会抛出"异常的线程main java.lang.NoClassDefFoundError: test (wrong name: deem/test).

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

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

谢谢

Ste*_*n C 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[])入口点方法.

所以如果 ......

  1. 你班级的完全限定的班级名称是deem.test; 即test该类在包中deem,AND
  2. 相应的类文件是./deem/test.class,AND
  3. 它具有所需的入口点方法AND
  4. 测试应用程序不依赖于您的其他类或第三方库...

java -cp . deem.test应该工作.