UnsatisfiedLinkError Java-исключение, когда класс с собственным методом отсутствует в пакете по умолчанию - PullRequest
0 голосов
/ 06 января 2012

Я пытаюсь открыть URL в браузере Windows по умолчанию на Java.К сожалению, я не могу использовать утилиты класса Desktop, поскольку код должен быть совместим с 1.5.

. В качестве решения я вызываю ShellExecute, используя собственный метод:

public class ShellExec {
   public native int execute(String document);

   {
       System.loadLibrary("HSWShellExec");
   }

   public static void main(String args[]) throws IOException {
       new ShellExec().execute("http://www.google.com/");
   }

}

Я положилDLL-файл в корне проекта Eclipse, который, по-видимому, включен в java.library.path.

Все работает просто отлично, если ShellExec находится в пакете по умолчанию, но если я перемещаю его в любой другой пакет, вызывается нативный вызовне с:

Exception in thread "main" java.lang.UnsatisfiedLinkError: apackage.ShellExec.execute(Ljava/lang/String;)I
at apackage.ShellExec.execute(Native Method)
at apackage.ShellExec.main(ShellExec.java:13)

У кого-нибудь есть идеи, почему?Я использую DLL из http://www.heimetli.ch/shellexec.html

Спасибо

.. позже отредактируйте:

В конце концов этот и другие классы будут служебными классами в приложении Eclipse RCP,и все внешние DLL будут помещены в общую папку lib, на которую будет указывать java.library.path.Библиотеки DLL видны, но я получаю тот же тип ошибок, что и простой пример, приведенный выше.

Ответы [ 2 ]

0 голосов
/ 21 января 2012

Блок, в который вы загружаете библиотеку, не является статическим для класса, просто определен как анонимный блок в экземпляре ShellExec. Поскольку вы никогда не создаете экземпляр ShellExec, анонимный блок никогда не вызывается и библиотека никогда не загружается.

Вместо этого вы должны иметь

static {
   System.loadLibrary("HSWShellExec");
}

Я думаю, что это решит вашу проблему.

0 голосов
/ 06 января 2012

передать аргумент VM -Djava.library.path=<path-to-dll-folder> в конфигурацию запуска вашего проекта.

...