2013-05-24 3 views
0

Я создал приложение Java, которое загружает одну DLL Windows из статического блока инициализации. Фрагмент кода приведен ниже:System.loadLibrary() возвращает исключение из статического блока

// MyTestJava class starts 
class MyTestJava 
{ 

static 
    { 
     System.loadLibrary("MyLib"); 
    } 
} // MyTestJava class def ends here 

Я слышал, что для видов библиотечных инициализаций выполненных из статического блока, JVM следует искать в java.library.path. Поэтому я устанавливаю путь библиотеки для JVM следующим образом и поставлю MyLib.dll под папку c:\Libs.

options[1].optionString = "-Djava.library.path=C:\\Libs"; 

К сожалению, я получаю отвратительную неудовлетворенную ошибку связи в своем приложении Java.

ответ

1

Не ясно, что options[1].optionString = "-Djava.library.path=C:\\Libs"; средства. Вы должны передать java.library.path как java arg

java -Djava.library.path=C:\Libs MainClass 
+0

Извините. Фактически опции [1] .optionString приведены как аргумент для API JNI_CreateJavaVM() для запуска JVM из моей программы на C++. Другим элементом, который я передал выше API, является путь класса. – Jaydhar

0

Первый звонок getEnv и проверьте, действительно ли «java.library.path» ссылается на вашу библиотеку. Else Вы можете попытаться дать абсолютный путь к файлу с помощью

static 
{ 
System.load("C:\\Libs"); 
} 
+0

Спасибо, Рик !. Но я не могу использовать абсолютный путь. Я также попробовал методы System.SetProperty для явного указания пути lib. Но это тоже не помогло мне. Любой другой способ решить без лишнего пути? – Jaydhar

+0

Пробовал ли getEnv и проверить, что значение java.library.path? – RickDavis

Смежные вопросы