SWT + Maven + Eclipse = java.lang.UnsatisfiedLinkError: нет swt-carbon-3346 или swt-carbon в swt.library.path - PullRequest
0 голосов
/ 24 июня 2011

Я пытаюсь запустить приложение SWT hello world:

public static void main(String args[]) throws IOException{
    Display display = new Display ();
    Shell shell = new Shell(display);
    shell.open ();
    while (!shell.isDisposed ()) {
        if (!display.readAndDispatch ()) display.sleep ();
    }
    display.dispose ();
}

Но я получаю следующее исключение.У меня есть версия org.eclipse.swt.carbon для macosx, используемая с eclipse / maven.Кто-нибудь видел это раньше?

Exception in thread "main" java.lang.UnsatisfiedLinkError: no swt-carbon-3346 or swt-carbon in swt.library.path, java.library.path or the jar file
    at org.eclipse.swt.internal.Library.loadLibrary(Library.java:219)
    at org.eclipse.swt.internal.Library.loadLibrary(Library.java:151)
    at org.eclipse.swt.internal.C.<clinit>(C.java:21)
    at org.eclipse.swt.widgets.Display.createDisplay(Display.java:943)
    at org.eclipse.swt.widgets.Display.create(Display.java:937)
    at org.eclipse.swt.graphics.Device.<init>(Device.java:119)
    at org.eclipse.swt.widgets.Display.<init>(Display.java:749)
    at org.eclipse.swt.widgets.Display.<init>(Display.java:740)
    at com.wuntee.aat.command.adb.LogCat.main(LogCat.java:30)

1 Ответ

2 голосов
/ 24 июня 2011

SWT реализован с использованием собственных библиотек пользовательского интерфейса - в данном случае библиотек Mac Carbon - и требует некоторого кода JNI для маршалинга вызовов SWT на собственные вызовы Carbon.Загрузка библиотек JNI немного отличается от обычной загрузки классов (динамические библиотеки должны сначала загружаться с System#loadLibrary).

Во-первых, если вы работаете на 64-битной машине, убедитесь, что вы передаете-d32 аргумент для JRE.(т. е. java -d32 MyTestClass).Библиотеки SWT Carbon являются только 32-разрядными и не будут загружаться в 64-разрядной среде выполнения.

По умолчанию SWT пытается загрузить динамические библиотеки .jnilib из файла JAR в вашем пути к классам - библиотека libswt-carbon-3346.jnilibдолжен быть в вашем org.eclipse.swt.carbon.macosx... банке.SWT попытается распаковать этот jnilib из вашего JAR-файла во временную папку и загрузить его.

Если он не может этого сделать по какой-либо причине (например, java.io.tmpdir не доступен для записи), тогда этоне удастся.Чтобы обойти это, вы должны извлечь libswt-carbon-3346.jnilib из org.eclipse.swt.carbon.macosx JAR и следовать инструкциям, приведенным в исключении.(Например, установите swt.library.path в местоположение этого jnilib.)

Не имеет отношения к вашему актуальному вопросу: вы используете SWT 3.3.С тех пор было сделано много изменений, включая (вероятно, предпочтительную) поддержку Какао.Обновление до новейших библиотек SWT в новейшем Eclipse может быть очень полезным.

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