我正在尝试从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
如何修复异常并让我的程序运行?
由于
答案 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”。 (或者你可能只是在那里错误地转录了一些东西。)
规则非常简单:
java
作为选项后的第一个参数。 (不简单类名。不“.class”文件名。不入口点方法的名称。)java
命令可以
foo.bar.baz.MyClass
映射到foo/bar/baz/MyClass.class
)... .
是类路径,则为./foo/bar/baz/MyClass.class
。public static void main(String[])
入口点方法。所以 IF ......
deem.test
;即test
类位于包deem
, AND ./deem/test.class
, AND 然后 java -cp . deem.test
应该有用。
答案 1 :(得分:1)
如果该类位于“deem”包中,那么您需要包含这样的包名。
java deem.test
这应该有效。