Как выполнить jar в Mac OS X, используя SWT / Eclipse? - PullRequest
0 голосов
/ 19 ноября 2011

Я изменил Java на 32-битный режим, чтобы разрешить запуск SWT, при отладке он работает хорошо.Но когда я использую Eclipse для экспорта .jar, он показывает эту ошибку.

Error dialog

Я уже добавил chmod 777. Что я сделал не так?

Вот результат консоли:

20/11/2011 12:10:36 AM  [0x0-0x3d89d86].com.apple.JarLauncher[73111]    Exception in thread "main" 
20/11/2011 12:10:36 AM  [0x0-0x3d89d86].com.apple.JarLauncher[73111]    java.lang.UnsatisfiedLinkError: Cannot load 32-bit SWT libraries on 64-bit JVM
20/11/2011 12:10:36 AM  [0x0-0x3d89d86].com.apple.JarLauncher[73111]        at org.eclipse.swt.internal.Library.loadLibrary(Unknown Source)
20/11/2011 12:10:36 AM  [0x0-0x3d89d86].com.apple.JarLauncher[73111]        at org.eclipse.swt.internal.Library.loadLibrary(Unknown Source)
20/11/2011 12:10:36 AM  [0x0-0x3d89d86].com.apple.JarLauncher[73111]        at org.eclipse.swt.internal.C.<clinit>(Unknown Source)
20/11/2011 12:10:36 AM  [0x0-0x3d89d86].com.apple.JarLauncher[73111]        at org.eclipse.swt.widgets.Display.<clinit>(Unknown Source)
20/11/2011 12:10:36 AM  [0x0-0x3d89d86].com.apple.JarLauncher[73111]        at com.testing.SWTApp.main(SWTApp.java:54)

МАНИФЕТэто как следовать:

Manifest-Version: 1.0
Class-Path: .
Main-Class: com.testing.SWTApp 

Ответы [ 4 ]

2 голосов
/ 19 ноября 2011

Попробуйте это:

java -d32 -XstartOnFirstThread -jar myapp.jar

Опция -d32 заставит виртуальную машину работать в 32-битном режиме. Опция -XstartOnFirstThread необходима для приложений SWT.

0 голосов
/ 15 ноября 2012

SWT-jar выполняет собственные библиотеки, которые зависят от вашей ОС.У вас есть одна версия SWT для: MacOSX 32 и 64 битwinsows 32 и 64 битLinux 32 и 64 бит

Вы можете указать опцию -d32 jvm.Это заставит JVM работать в 32-битном режиме.Однако вам необходимо иметь 32-битную реализацию JVM, доступную в вашей ОС.

Вы также можете динамически загружать правильный SWT Jar: вы включаете в свое приложение и jar (swt-macosx-32bits & swt-macosx-64bits) и программно загружаете требуемый jar:

String osArch = System.getProperty ("sun.arch.data.model");
if (osArch == null) {
    osArch = System.getProperty ("com.ibm.vm.bitmode");
}
URLClassLoader classLoader = (URLClassLoader) JarLoaderUtils.class.getClassLoader();
URL.setURLStreamHandlerFactory(new RsrcURLStreamHandlerFactory(classLoader));
Method addUrlMethod = URLClassLoader.class.getDeclaredMethod("addURL", URL.class);
addUrlMethod.setAccessible(true);
swtFileName = osArch.contains("64") ? SWT_MAC_x86_64 : SWT_MAC_x86;
URL swtFileUrl = new URL("rsrc:" + swtFileName);
addUrlMethod.invoke(classLoader, swtFileUrl);

Обратите внимание, что вы, кажется, запускаете свое приложение в macosx, вам также следует добавить опцию -XstartOnFirstThread.

0 голосов
/ 19 ноября 2011
20/11/2011 12:10:36 AM  [0x0-0x3d89d86].com.apple.JarLauncher[73111]    java.lang.UnsatisfiedLinkError: Cannot load 32-bit SWT libraries on 64-bit JVM

Пожалуйста, обратите внимание на эту ошибку.Вам нужны 64-битные библиотеки зависимостей для запуска.Это зависит от загрузки по умолчанию Java.Если это 32-битный пакет, вам нужно, чтобы стандартным путем jvm classpath был 32-битный java.У вас есть возможность изменить его в затмении.

0 голосов
/ 19 ноября 2011

Проблема в том, что не Eclipse выполняет ваш встроенный jar, а в Finder / java launcher. Вам нужно перейти на /Applications/Utilities/Java Preferences.app и изменить порядок (перетащить), чтобы 32-разрядная версия была выбрана до 64-разрядной версии. Для справки моя выглядит так:

My Java Preferences

затем, когда вы выполните java -version (без параметра -d), вы получите 32-битный JRE. и когда вы дважды щелкнете по банке в окне поиска или используете open app.jar, это должно сработать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...