从命令行窗口中执行Java程序失败(executing java program from comm

2019-10-17 06:52发布

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

.java文件位于“C:\ Users \用户名\桌面\ direcName”。 该软件包是deem和类名test

我可以到该目录,并从那里使用编译javac test.java和工作完全正常。 然而,当我尝试使用运行它。

java testjava -classpath directory testjava -cp . 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

如何解决该异常,并让我的程序运行?

谢谢

Answer 1:

这是“常见的初学者的错误”与在命令行中运行Java程序的变化。

Java测试或Java -classpath目录测试或java命令。 螺纹主要java.lang.NoClassDefFoundError测试抛出“异常:测试(错误的名称:认为/测试)。

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

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

这是现在告诉你,它不能找到“认为/ main.class”。

需要注意的是, 现在你已经告诉它要寻找一个叫“deem.main”,而不是“测试”或“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. 它具有所需的入口点法
  4. 测试应用程序不依赖于其他类你们的或第三方库...

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



Answer 2:

如果该类位于包“认为”,那么你就需要包括这样的包名。

java deem.test

这应该工作。



文章来源: executing java program from command line in windows fails