有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

编译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)

共 (3) 个答案

  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. # 2 楼答案

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

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

    java中的路径区分大小写pausepredpausePred不同