SWT баночка для другой платформы - PullRequest
6 голосов
/ 20 августа 2011

Я использую JWebBrowser в приложении Swing. Этот класс принадлежит The DJ Project . Это требует SWT JAR для выполнения. Теперь я включил SWT JAR для окон в мою упаковку JAR приложения. Я хочу знать, как я могу включить SWT JAR для Linux / Mac в той же упаковке? Я использую муравей для создания jar приложения. Должен ли я построить банку с разными банками для разных платформ?

Ответы [ 3 ]

10 голосов
/ 11 февраля 2012

если вы хотите иметь одну сборку, которая работает на разных платформах (Win / Mac / Linux / * nix) или архитектурах (32/64 бит), тогда вы можете связать файл SWT jar для каждой целевой платформы с вашим установщиком, а затем загрузите правильный динамически во время выполнения (или попросите вашего установщика скопировать правильный файл SWT во время установки).

например. скажем, вы хотите поддерживать 32- и 64-битные Windows и Linux, у вас были бы файлы SWT:

lib/swt_win_32.jar
lib/swt_win_64.jar
lib/swt_linux_32.jar
lib/swt_linux_32.jar

Сделайте так, чтобы ваш скрипт / установщик ant включал в себя все это (они имеют размер около 1,6 МБ каждый), а затем во время выполнения в вашем коде вы можете определять ОС и архитектуру, используя системные свойства Java

System.getProperty("os.name");
System.getProperty("os.arch");

чтобы создать имя правильного файла jar.

Загрузка jar во время выполнения может быть выполнена с помощью пользовательского загрузчика классов или путем вызова защищенного метода URLClassloader.addURL(URL url) с использованием отражения.

Я поместил рабочий код для выполнения этой задачи на моем сайте: http://www.chrisnewland.com/select-correct-swt-jar-for-your-os-and-jvm-at-runtime-191

Если вы можете выдержать запах кода, то это быстрое решение очень распространенной проблемы SWT.

2 голосов
/ 21 августа 2011

В Mac OS + X вы можете включить необходимые библиотеки JAR и JNI в комплект приложений , как показано в этом проекте .См. Также Развертывание приложений SWT в Mac OS X .

В Linux на большинстве платформ доступен пакет swt-gtk.В качестве конкретного примера, вот скрипт запуска для AppleCommander:

java -Djava.library.path=/usr/lib/jni \
    -cp /usr/lib/java/swt-gtk-3.5.1.jar:AppleCommander-1.3.5.8.jar \
    com.webcodepro.applecommander.ui.AppleCommander -swt
1 голос
/ 12 сентября 2012

Этот ответ содержит код для выбора правильного SWT JAR при запуске приложения: Создание кроссплатформенного приложения Java SWT

Все, что вам нужно сделать, это поместить все JAR-файлы в нужную папку, и код подберет их.

...