2012-10-01 43 views
0

我有一个名为GameClient.jar的jar,它有一个主要的方法。并且我有一个包含org/json/JSONException.class的json.jarclasspath not working - java lang ClassNotFoundException

这两个都在dist文件夹中。

我运行下面的 java -classpath dist/json.jar -jar dist/gameclient.jar

真的不知道为什么我仍然得到

Exception in thread "main" java.lang.NoClassDefFoundError: org/json/JSONException 
    at java.lang.Class.getDeclaredMethods0(Native Method) 
    at java.lang.Class.privateGetDeclaredMethods(Unknown Source) 
    at java.lang.Class.getMethod0(Unknown Source) 
    at java.lang.Class.getMethod(Unknown Source) 
    at sun.launcher.LauncherHelper.getMainMethod(Unknown Source) 
    at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source) 

Caused by: java.lang.ClassNotFoundException: org.json.JSONException 

我在Windows XP和Java 1.7。无论是否使用类路径选项,我都会得到相同的错误。

+0

是目录“DIST”相对于当前的工作目录? –

回答

7

java文档:

罐子

执行封装在JAR文件的程序。第一个参数是JAR文件 的名称,而不是启动类名称。为了使此选项生效,JAR 文件的清单必须包含Main-Class:classname形式的一行。这里,classname标识具有公共静态void main(String [] args)方法的 类,该方法用作阳离子的起点。有关使用Jar文件 和Jar文件清单的信息,请参阅jar教程(1)和Java Tutorial @ http://java.sun.com/docs/books/tutorial/jar的Jar trail。

当您使用此选项时,JAR文件是所有用户类的源,而其他用户类路径设置将被忽略。

所以你的gameclient.jar必须包括你需要的所有用户类。 classpath设置被忽略。只需创建gameclient.jar以包含json.jar中的类。