Проверьте, загружена ли библиотека dll? (Ява)
В программе Java, которую я пишу, я делаю jni-вызов DLL и загружаю библиотеку при запуске следующим образом
static
{
System.loadLibrary("LdapAuthenticator2");
}
Затем я реализовал другой класс, который загружает одну и ту же библиотеку, и я получаю сообщение об ошибке, заявив, что библиотека уже загружена, есть ли способ проверить, запущена ли библиотека?
Спасибо,
-Pete
Ответы
Ответ 1
Проверьте мой ответ на этот вопрос
Как получить список загружаемых библиотек JNI?
Решение работает, к сожалению, у плаката вопроса, похоже, есть проблемы с совместимым с SUN JVM или слишком ограниченным SecurityManager.
Ссылка на исходный код исходного кода POC.
List loaded JNI libraries java sourcecode
Ответ 2
Какая ошибка? Если это исключение, вы можете просто его поймать?
Другой подход - сделать ровно один класс, ответственный за загрузку библиотеки. Вы можете загрузить библиотечную часть статического инициализатора класса, а затем загрузить класс == для загрузки библиотеки.
EDIT: javadocs для Runtime.loadLibrary()
(какие вызовы System.loadLibrary
) даже предлагает подход статического инициализатора:
Если встроенные методы должны использоваться в реализации класса, стандартная стратегия заключается в том, чтобы код в файле библиотеки (назовите его LibFile), а затем поставить статический инициализатор:
static { System.loadLibrary("LibFile"); }
в объявлении класса. Когда класс загружается и инициализируется, необходимый собственный код реализация для собственных методов затем будет загружен.
В javadocs также говорится:
Если этот метод вызывается более одного раза с тем же именем библиотеки, второй и последующие вызовы игнорируются.
что делает меня еще более любопытным по поводу ошибки, которую вы получаете.