2010-12-06 53 views
1

我有一个文件夹gnu\getopt包含Getopt.class这是由ChatDemo.jar需要解析器参数的参数,当我java -cp xSocket.jar;. ChatDemo.jar运行它产生:链接getopt的主罐子

Exception in thread "main" java.lang.NoClassDefFoundError: gnu/getopt/Getopt 
     at ChatDemo.main(ChatDemo.java:24) 
Caused by: java.lang.ClassNotFoundException: gnu.getopt.Getopt 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:307) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:248) 
     ... 1 more 

ChatDemo.java:

import gnu.getopt.Getopt; 

ChatDemo清单:

Manifest-Version: 1.0 
Created-By: 1.6.0_22 (Sun Microsystems Inc.) 
Main-Class: ChatDemo 
Class-Path: xSocket.jar 
+0

`gnu \ getopt`是在你的jar或它的外面? – 2010-12-06 08:34:41

+0

仍然需要回答.... – Proyb2 2010-12-06 09:30:54

+0

它在外面,如果我可以打包里面的话会很理想。 – Proyb2 2010-12-06 09:31:30

回答

1

java -classpath "xSocket.jar;.;ChatDemo.jar ChatDemo(主类名称后面的.jar)运行它。

请注意,您必须将包含“gnu”的文件夹添加到类路径中。另一个解决方案是将getopt类放入JAR中并将其添加到类路径中。确保保存文件夹结构(gnu\getopt)。

1

它看起来像你正在混合运行java的两种方式。您应该提供类路径(例如,使用-cp参数),或者从JAR文件启动。你不能这样做。

如果使用JAR文件启动,则会忽略-cp参数。在这种情况下,您必须在JAR文件的清单中指定完整的类路径。

ChatDemo.jar文件中的清单显然不包括。您可以通过两种方式解决这个问题:

  • 更新的清单类路径是“Class-path: xSocket.jar .” ......注意,我们使用空间的条目在这里分开,不;:
  • Getopt.class添加到JAR文件中作为gnu/getopt/Getopt.class

但是,如果使用推出一个JAR文件,你必须使用-jar选项。如果您尝试您的应用程序是这样的:

java -cp xSocket.jar;. ChatDemo.jar 

它会失败告诉你,它不能找到一个名为ChatDemo.jar类;即它会将JAR文件名错误地解释为合格的类名。

1

添加主类 - 完全限定(我的意思是根据包结构)包含main方法的类的类名。