2010-12-06 48 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方法的類的類名。