SWT, упаковочная банка

Я сделал простую банку для своего java-приложения (сборка с SWT). В netbeans запускается нормально, как и положено. Но когда я запускаю его с помощью java -jar [jarName], у меня возникает такая ошибка:

java -jar jarname.jar 
Exception in thread "main" java.lang.NoClassDefFoundError: org/eclipse/swt/widgets/Composite
    at roxed.Main.main(Main.java:15)
Caused by: java.lang.ClassNotFoundException: org.eclipse.swt.widgets.Composite
    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

Я загрузил SWT из http://eclipse.org/swt (сборка linux), распаковал jar и добавил эту папку к проекту.

Может кто-нибудь сказать, почему я не могу выполнить это не из IDE?


person sdf    schedule 28.03.2011    source источник


Ответы (4)


ОБНОВЛЕНО

swt.jar необходимо добавить в запись Class-Path в META-INF/MANIFEST.MF файле.

Вы можете узнать больше о параметрах Java Launcher по этой ссылке .

person CoolBeans    schedule 28.03.2011
comment
java -cp libraries / swt.jar -jar jarname.jar генерирует ту же ошибку - person sdf; 28.03.2011
comment
вам, вероятно, нужно указать полный путь к swt.jar, например ~/../libraries/swt.jar - person CoolBeans; 28.03.2011
comment
-1. Он спросил, как добавить библиотеки в путь к классам, расположенный ВНУТРИ фляги. - person Gabriel Llamas; 07.08.2012
comment
@GabrielLlamas - Поскольку он принял мой ответ, я полагаю, это ему помогло. Кстати, проголосовать против ответа после 17 месяцев принятия - это довольно круто с вашей стороны. - person CoolBeans; 07.08.2012
comment
Если ответ неверен, неважно, задавали ли его 999 лет назад. Полная информация в ответе Берни. - person Gabriel Llamas; 07.08.2012
comment
@GabrielLlamas - Я не понимал, что -jar игнорирует -cp. Исправил ответ. - person CoolBeans; 07.08.2012

Добавьте файлы SWT в путь к классам. В частности, org.eclipse.swt_x.x.x и org.eclipse.swt.win32.win32.x86_x.x.x. Где x - номер версии, и вам придется искать версию linux, а не win32, как я показал.

person Favonius    schedule 28.03.2011

Нашел ... Но не совсем так. Портировал проект в eclipse, добавил все jar-файлы. И просто экспортировал как исполняемый файл-jar. И это работает ...

В любом случае спасибо всем за участие.

person sdf    schedule 28.03.2011

Это правда, что java -cp библиотеки / swt.jar -jar jarname.jar генерирует ту же ошибку.

Это потому, что при использовании -jar Java не использует значения -classpath.

Вам необходимо добавить библиотеки в раздел Class-Path в своем манифесте внутри пакета jar.

Например:

Manifest-Version: 1.0
Main-Class: irisRecognition
Class-Path: ../libs/swt64.jar ../libs/bij.jar

Вы можете найти более подробное описание в ответе здесь

person berni    schedule 10.05.2011