2013-06-29 49 views
-3

我試圖運行使用CMD命名easyflow-gui.jar罐子捆綁Java程序:找不到主類

java -classpath "." -jar easyflow-gui.jar 

工作目錄是包含所有相關庫的目錄。

的jar文件我試圖運行的清單文件的內容是:

Manifest-Version: 1.0 
Ant-Version: Apache Ant 1.8.3 
Created-By: 1.6.0_32-b27 (Sun Microsystems Inc.) 
Main-Class: easyflow.custom.jgraphx.editor.SchemaEditor 

這種嘗試的結果是:

Exception in thread "main" java.lang.NoClassDefFoundError: com/mxgraph/util/mxEventSource$mxIEventListener 
Caused by: java.lang.ClassNotFoundException: com.mxgraph.util.mxEventSource$mxIEventListener 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:217) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:205) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:321) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:266) 
Could not find the main class: easyflow.custom.jgraphx.editor.SchemaEditor. Program will exit. 

問題:該類別中的一個實際上找不到:mxEventSource $ mxIEventListener或主類easyflow.custom.jgraphx.editor.SchemaEditor?

編輯1: 我檢查了文件夾,並提取了罐子,我覺得都可用類(捆綁到其各自的罐子在工作目錄):

$ls easyflow/custom/jgraphx/editor/SchemaEditor* 
easyflow/custom/jgraphx/editor/SchemaEditor$1.class 
easyflow/custom/jgraphx/editor/SchemaEditor$2.class 
easyflow/custom/jgraphx/editor/SchemaEditor.class 
easyflow/custom/jgraphx/editor/SchemaEditor.java 
$ls com/mxgraph/util/mxEventSource* 
com/mxgraph/util/mxEventSource$mxIEventListener.class 
com/mxgraph/util/mxEventSource.class 

回答

0

如果你正確讀取外,你會看到錯誤的原因:

Caused by: java.lang.ClassNotFoundException: com.mxgraph.util.mxEventSource$mxIEventListener 

你不包括包含在類路徑中com.mxgraph.util.mxEventSource$mxIEventListener的jar文件。從快速谷歌搜索,你將需要jGraph庫。

我希望這會有所幫助。

+0

不知怎的,我不知道如何將其納入其他比我:指定類路徑的地方,我的文件夾,然後將裝有類到該目錄罐子。 .. – user1240076

+0

爲什麼不只是'java -jar easyflow-gui.jar'並且看看會發生什麼? –

+0

我試過並給了我完全相同的錯誤/異常。 – user1240076

1

如果要包含jar文件,則不能爲類路徑指定".",它必須是以冒號分隔的jar文件或目錄列表(或以分號分隔,取決於操作系統)。嘗試使用java -help以獲取命令行選項的說明。

另外,如果我沒有記錯的話-jar-classpath不能一起工作,所以你必須單獨使用-classpath並明確指定主類。

嘗試像

java -cp easyflow-gui.jar:foo.jar:bar.jar easyflow.custom.jgraphx.editor.SchemaEditor 

...其中foo.jarbar.jar是 「其他相關的圖書館」。

+0

謝謝你的提示! java -cp。 easyflow.custom.jgraphx.editor.SchemaEditor正在努力... – user1240076

+0

不知道我做了什麼,但今天不能再現。我管理指定某個文件夾中所有jar的唯一方法是使用通配符,如下所示:java -cp「lib/*」classname – user1240076

0

默認的類路徑是當前的工作目錄。 所以,如果你已經在你當前的工作目錄中有jar,你不需要明確指定classpath。

下面的命令應該工作

java -jar easyflow-gui.jar 
+0

請解釋一下爲了讓它工作起來需要滿足哪些條件!我仍然只能通過指定類名來運行它,這顯然不是必須的,因爲它已經在清單中設置了。 – user1240076

+0

清單應指定將運行程序的應用程序入口點。 – Deepak

+0

就你而言,清單文件中的應用程序入口點似乎確實是SchemaEditor類。運行此命令時得到的錯誤與原始報告的錯誤不同。我覺得很奇怪。 – Deepak