Java:从命令行运行的问题

时间:2013-01-10 17:36:24

标签: java compilation

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

3 个答案:

答案 0 :(得分:1)

  • 编写完整的目录路径,然后编译所有类
  • 编写完整目录并运行包含main()方法的类

答案 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中的路径区分大小写。 pausepredpausePred

不同