我试图运行一个非常简单的一类的“Hello World”在Windows的命令行程序。
该.java
文件位于“C:\ Users \用户名\桌面\ direcName”。 该软件包是deem
和类名test
。
我可以到该目录,并从那里使用编译javac test.java
和工作完全正常。 然而,当我尝试使用运行它。
java test
或java -classpath directory test
或java -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
如何解决该异常,并让我的程序运行?
谢谢
这是“常见的初学者的错误”与在命令行中运行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”级。 (也许你只是转录一些错误存在。)
这些规则真的相当简单:
- 您必须提供完全合格的类名
java
作为选项后的第一个参数。 ( 不是简单的类名, 不是 “.class”的文件名。入口点方法的不是名称。) - 您必须指定类路径使得
java
命令 - 类名称映射到的类文件的相对路径(例如
foo.bar.baz.MyClass
映射到foo/bar/baz/MyClass.class
)... - 然后解析对类路径条目的一个相对路径; 例如,如果
.
是的类路径,然后./foo/bar/baz/MyClass.class
。
- 类必须具有所需要的
public static void main(String[])
入口点方法。
因此, 如果 ...
- 你的类的完全限定类名是
deem.test
; 即, test
类是在包deem
,AND - 相应的类文件是
./deem/test.class
,AND - 它具有所需的入口点法,
- 测试应用程序不依赖于其他类你们的或第三方库...
THEN java -cp . deem.test
java -cp . deem.test
应该工作。
如果该类位于包“认为”,那么你就需要包括这样的包名。
java deem.test
这应该工作。