我正在Eclipse中编写程序,并从命令行运行它。在该程序的早期版本中,它没有任何争论,我可以正常运行> java foo
。我之后添加了几个参数,需要将其作为> java foo file1.txt file2.txt
运行。当我运行此操作时,出现java.lang.NoClassDefFoundError:
错误。即使我包含类路径,即> java foo file1.txt file2.txt -cp .
它仍然不起作用。
有人能指出我正确的方向吗?
修改 这是完整的堆栈跟踪
Exception in thread "main" java.lang.NoClassDefFoundError: edu/cuny/pausePred/TemplateToCharTestVector (wrong name: edu/cuny/pausepred/TemplateToCharTestVector)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:791)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:480)
答案 0 :(得分:1)
答案 1 :(得分:1)
初学者使用Java时常犯的错误是误解了类名和类路径。
类名是包含包的完全限定的东西;编译器允许您使用其基本名称引用类,这样可以方便地保持编程理智。您班级的实际名称是<package>.foo
。
类路径必须包含您正在使用的任何包的根。因此,如果foo的包是edu.cuny.pausePred
,那么foo的类名是edu.cuny.pausePred.foo
,类路径必须包含包含edu
的目录,而不是包含foo
的目录。
你的命令行应该是这样的:
jave -cp the-directory-root-for-java-sources foo file1.txt file2.txt
注意这假设两个数据文件位于当前目录中。
另外,请注意,类基本名称应为大写字母,因此Foo
,而不是foo
。
答案 2 :(得分:1)
Exception in thread "main" java.lang.NoClassDefFoundError:
edu/cuny/pausePred/TemplateToCharTestVector
(wrong name: edu/cuny/pausepred/TemplateToCharTestVector)
java中的路径区分大小写。 pausepred
与pausePred