2013-01-10 59 views
1

我正在Eclipse中编写一个程序,并从命令行运行它。在该程序的早期版本中,它没有任何争论,我可以很好地运行它,如> java foo。我已经添加了一些参数,并且需要运行它作为> java foo file1.txt file2.txt。当我运行这个,我得到一个java.lang.NoClassDefFoundError:错误。即使我包含类路径,即> java foo file1.txt file2.txt -cp .,它仍然不起作用。Java:从命令行运行的问题

难道有人指着我正确的方向吗?

编辑 下面是完整的堆栈跟踪

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

包含异常的堆栈跟踪;它会给出它正在寻找的课程的名称。很可能您需要提供完全合格的名称。类路径需要位于类名之前,否则它将被视为程序的参数。 –

+0

@DelShekasteh - 是的,我做了 –

+0

@SoftwareMonkey - 我刚刚添加了堆栈跟踪。你能把我指向我应该看的地方吗? –

回答

1
  • 写那么完整的目录路径编译所有的类
  • 写完整的目录,并运行一个包含main()方法的类
+0

感谢您的想法。不幸的是,我现在得到错误'无法找到或加载主类[完整目录路径]'。有什么建议么? –

+0

运行包含main()方法的类。当编译一个名为“BankAccounts”文件... 编译如下:<文件目录> BankAccounts.java然后 来看是这样的:<文件目录> BankAccounts我的修订答案的 –

+0

采取通知。 –

1

初学者在使用Java时常见的错误是误解类名s和类路径。

类名是完全合格的东西,其中包括包;编译器允许您使用其基本名称来引用一个类,这可以让程序保持健全。你班的实际名字是<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

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

java中的路径区分大小写。 pausepred不等于pausePred