Проверьте, если библиотека DLL уже загружена? (Джава) - PullRequest
13 голосов
/ 16 июля 2009

В программе на Java, которую я пишу, я делаю jni-вызов в dll и загружаю библиотеку при запуске следующим образом

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

Затем я реализовал другой класс, который загружает ту же библиотеку и получает сообщение о том, что библиотека уже загружена, есть ли способ проверить, работает ли библиотека?

Спасибо
-Pete

Ответы [ 2 ]

8 голосов
/ 16 июля 2009

Проверьте мой ответ на этот вопрос

Как получить список загруженных библиотек JNI?

Решение работает, к сожалению, у автора вопроса есть проблемы с несовместимой с SUN JVM или слишком ограниченным SecurityManager.

Ссылка на пример исходного кода POC.

List loaded JNI libraries java sourcecode

0 голосов
/ 16 июля 2009

Что за ошибка? Если это исключение, вы можете его поймать?

Другой подход - назначить ответственность за загрузку библиотеки только одним классом. Вы можете сделать загрузку библиотеки частью статического инициализатора класса, а затем загрузить класс == загрузка библиотеки.

РЕДАКТИРОВАТЬ: javadocs для Runtime.loadLibrary() (который System.loadLibrary вызывает) даже предлагает подход статического инициализатора:

Если в реализации класса должны использоваться нативные методы, стандартная стратегия ставить родную код в файле библиотеки (назовите его LibFile), а затем поставить статический инициализатор:

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

в объявлении класса. Когда класс загружен и инициализирован, необходимый нативный код реализация для нативных методов затем будет также загружен.

Javadocs также говорят:

Если этот метод вызывается более одного раза с одним и тем же именем библиотеки, второй и последующие вызовы игнорируются.

, что делает меня еще более любопытным по поводу получаемой вами ошибки.

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