编译Java:从命令行运行的问题
我正在用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)
# 1 楼答案
初学者在使用Java时的一个常见错误是误解类名和类路径
类名是包含包的完全限定的东西;编译器允许您使用基名引用类,这有助于保持编程正常。类的实际名称是
<package>.foo
类路径必须包含您正在使用的任何包的根。因此,如果foo的包是
edu.cuny.pausePred
,那么foo的类名是edu.cuny.pausePred.foo
,并且类路径必须包括包含edu
的目录,而不是包含foo
的目录您的命令行应该类似于:
注意,这假定两个数据文件位于当前目录中
另一方面,请注意类基名应该是前导大写,所以
Foo
,而不是foo
# 2 楼答案
# 3 楼答案
java中的路径区分大小写
pausepred
与pausePred
不同