1

我正在 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)
4

3 回答 3

1
Exception in thread "main" java.lang.NoClassDefFoundError: 
  edu/cuny/pausePred/TemplateToCharTestVector 
  (wrong name: edu/cuny/pausepred/TemplateToCharTestVector)

java中的路径是区分大小写的。 pausepred不一样pausePred

于 2013-01-11T08:48:49.837 回答
1
  • 编写完整的目录路径然后编译所有类
  • 编写完整目录并运行包含 main() 方法的类
于 2013-01-10T18:02:38.133 回答
1

初学者使用 Java 的一个常见错误是误解类名和类路径。

类名是包含包的完全限定的东西;编译器允许您使用其基名称来引用一个类,这便于保持编程的理智。您的班级的实际名称是<package>.foo.

类路径必须包含您正在使用的任何包的根目录。因此,如果您的 foo 包是 fooedu.cuny.pausePred的类名,edu.cuny.pausePred.foo则类路径必须包含包含的目录edu,而不是包含的目录foo

你的命令行应该是这样的:

jave -cp the-directory-root-for-java-sources foo file1.txt file2.txt

请注意,这假定两个数据文件位于当前目录中。

顺便说一句,请注意类基名应该是大写的,所以Foo,不是foo

于 2013-01-10T19:02:12.700 回答