2016-04-12 6 views
1

У меня есть приложение с графическим интерфейсом, построенное с Swing и сторонней графической библиотекой GraphStream (есть 2 JAR для включения). Это, вероятно, проблема с классом и независимо от самой библиотеки.Невозможно выполнить Java GUI из командной строки, как sporatically

Когда я забегаю из Eclipse, появляется GUI и ошибок и предупреждений нет.

Однако, когда я пытаюсь запустить из командной строки, я либо получаю NoClassDefFoundError, либо приложение запускается и «зависает» бесконечно во время загрузки библиотек. Это кажется совершенно спорадическим. Иногда ошибка печатается, и иногда JVM просто зависает. Это, как я бегу приложение:

java -verbose -classpath '../lib;.' -cp . bt_sim <args> 

два JAR-файлы находятся в каталоге «../lib» (и только эти два файла в этом каталоге). Более того, классы, которые я написал, находятся в "." - Если ошибка действительно поднята, это выход:

... Other loading output from JVM debug ... 
[Loaded java.util.IdentityHashMap$KeySet from C:\Program Files\Java\jre8\lib\rt.jar] 
java.lang.NoClassDefFoundError: org/graphstream/graph/Graph 
    at bt_sim.main(bt_sim.java:70) 
Caused by: java.lang.ClassNotFoundException: org.graphstream.graph.Graph 
    at java.net.URLClassLoader$1.run(Unknown Source) 

И когда зависание приложения:

... 
[Loaded java.util.Formatter$Flags from C:\Program Files\Java\jre8\lib\rt.jar] 
[Loaded java.util.Formatter$Conversion from C:\Program Files\Java\jre8\lib\rt.jar] 
[Loaded sun.misc.Cleaner from C:\Program Files\Java\jre8\lib\rt.jar] 

Эта же ошибка происходит даже тогда, когда я бег из среды Linux. Во всех случаях я работаю с JRE 8. В Eclipse и при запуске из командной строки есть только TWO JAR-файлы (зависимые от третьего лица графики). Файлы JAR находятся в каталоге «lib» в моей команде выше. Любые идеи о том, что исследовать, были бы очень полезны!

МОЕ РЕШЕНИЕ Я не понимаю, что я должен был включать каждый сторонний файл JAR на пути к классам явно. После того, как я сделал это, приложение выполняется как ожидалось: -/

+0

Престижность использования '-verbose' для постановки диагноза. – trashgod

ответ

1

-classpath Обратите внимание, что и -cp являются псевдонимами:

$ java -help 
    … 
    -cp <class search path of directories and zip/jar files> 
    -classpath <class search path of directories and zip/jar files> 
        A : separated list of directories, JAR archives, 
        and ZIP archives to search for class files. 

Я подозреваю, что один отменяет другой, когда используются вместе. Вместо этого используйте form, который включает в себя необходимый каталог lib и разделитель путей для вашей платформы.

+0

Да, извините, я копировал/вставлял неправильный фрагмент кода. Но, я передам вам кредит, потому что это заставило меня встретить ссылку, которая заставило меня понять, что я должен включить фактический сторонний JAR-файл в classpath! Я не очень много работаю с Java (в основном C++), но я думал, что предоставление каталога было достаточно. Возможно, есть схема именования, которой JAR должен следовать за тем, что я не соблюдал ... Но, как только я помещаю фактический путь в 2 файла JAR на CP, он работает. Спасибо за ответ. – Jmoney38

+0

Отлично; рад, что вы его отсортировали. Вы можете [ответить на свой вопрос] (http://meta.stackoverflow.com/q/17463/163188), чтобы обновить свой вопрос, чтобы отразить то, что сработало. Некоторые связанные ловушки рассматриваются [здесь] (http://stackoverflow.com/search?tab=votes&q=user%3a230513%20java.ext.dirs). – trashgod