2012-10-08 63 views
1

我试图从Windows命令行运行一个非常简单的一个类“Hello World”程序。从Windows命令行执行java程序失败

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

我可以cd到目录,并从那里使用javac test.java进行编译,这工作得很好。然而,当我尝试使用运行它。

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

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

如何解决例外,并让我的程序运行?

谢谢

+1

可以请分享'测试'源代码... – MadProgrammer

+0

你可以cd到哪个目录?请描述您正在使用的目录结构。 –

回答

1

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

java deem.test 

这应该工作。

+0

有人在这个问题中提到他尝试过,但它不起作用。 –

+0

它不起作用。当我这样做时,它找不到课程。 –

+0

还要确保在你的测试类中有'public static void main(String args [])'方法 – MadProgrammer

5

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

java test or java -classpath directory test or java -cp . test it throws "Exception in thread main java.lang.NoClassDefFoundError: test (wrong name: deem/test).

的JVM实际上是告诉你,找到了“的Test.class”搜索路径上,但是当它读取类文件,它的结论是,该文件应该一直处于” ./deem/test的.class”或‘目录/认为/的Test.class’......这取决于‘-cp’/‘-classpath’的说法,你实际上使用

If I use java deem.test it says: Error, could not find or load main class deem.main

现在这是告诉你它找不到“认为/ 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[])入口点方法。

所以IF ...

  1. 类的完全限定类名是deem.test;即test类是在包deemAND
  2. 相应的类文件是在./deem/test.classAND
  3. 它所需的条目点的方法,AND
  4. 测试应用不依赖于其他类的您或第三方库的...

THENjava -cp . deem.test SH会工作。

+0

+1,说得好.. –