2013-06-29 15 views
-3

Я пытаюсь запустить программу Java в комплекте в банку с именем EasyFlow-gui.jar с помощью ЦМД:Не удалось найти основной класс

java -classpath "." -jar easyflow-gui.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?

Edit 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 

Вы не включили .jar файл, который содержит com.mxgraph.util.mxEventSource$mxIEventListener в вашем пути к классам. Из быстрого поиска Google вам понадобится библиотека jGraph.

Надеюсь, это поможет.

+0

Как-то я не знаю, как включить его еще, чем я: указав путь класса к папке, где я и поместить сосуд, содержащий класс в этот каталог. .. – user1240076

+0

Почему не просто 'java -jar easyflow-gui.jar' и посмотреть, что происходит? –

+0

Я попробовал и дал мне ту же ошибку/исключение. – user1240076

1

Вы не можете указать "." для пути к классу, если вы хотите включить файл jar, он должен быть разделен двоеточием в виде списка файлов jar или каталогов (или разделенных точкой с запятой, в зависимости от операционной системы). Попробуйте java -help, чтобы получить описание параметров командной строки.

Также, если я правильно помню -jar и -classpath не работают вместе, поэтому вам необходимо использовать только -classpath и указать основной класс явно.

Try что-то вроде

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

... где foo.jar и bar.jar являются "другими соответствующими библиотеками".

+0

Спасибо за этот намек! java -cp. easyflow.custom.jgraphx.editor.SchemaEditor работает наконец ... – user1240076

+0

не уверен, что я сделал, но не могу воспроизвести сегодня.единственный способ, которым я сумел указать все банки в определенной папке, - использовать подстановочный знак следующим образом: java -cp "lib/*" classname – user1240076

0

Путь по умолчанию - текущий рабочий каталог. Итак, если у вас уже есть банка в текущем рабочем каталоге, вам не нужно явно указывать путь к классам.

Следующая команда должна работать

java -jar easyflow-gui.jar 
+0

Не могли бы вы объяснить, какие условия должны быть выполнены, чтобы заставить это работать так? Я все еще могу запустить его, указав имя класса, которое, очевидно, не обязательно необходимо, поскольку оно уже установлено в манифесте. – user1240076

+0

В манифесте должна указываться точка входа приложения, которая будет запускать программу. – Deepak

+0

В вашем случае точка входа приложения в файл манифеста, по-видимому, является классом SchemaEditor. Это ошибка, которую вы получили во время выполнения этой команды, отличной от исходной сообщенной ошибки. Мне кажется странным. – Deepak

Смежные вопросы