1. Все они могут использоваться для загрузки файлов библиотеки, независимо от того, являются ли они файлами библиотеки JNI или файлами библиотеки, отличными от JNI. Соответствующий файл библиотеки JNI необходимо загрузить с помощью одного из этих двух методов перед вызовом любого собственного метода.
2. Параметр System.load — это абсолютный путь к файлу библиотеки, который может быть любым.
Например, вы можете загрузить файл библиотеки JNI на платформе Windows следующим образом:
System.load("C://Documents and Settings//TestJNI.dll");.
3. Параметр System.loadLibrary представляет собой имя файла библиотеки и не включает расширение файла библиотеки.
Например, вы можете загрузить файл библиотеки JNI на платформе Windows следующим образом:
System.loadLibrary («ТестJNI»);
Здесь TestJNI.dll должен находиться по пути, указанному переменной jvm java.library.path.
Значение этой переменной можно получить следующим образом:
System.getProperty("java.library.path");
По умолчанию на платформах Windows это значение содержит следующие местоположения:
1) Некоторые каталоги, связанные с jre
2) Текущий каталог программы
3) Каталог Windows
4) Системный каталог (system32)
5) Путь к переменной системной среды указывает каталог.
4. Если файл библиотеки, который вы хотите загрузить, статически связан с другими динамически подключаемыми библиотеками, например, TestJNI.dll статически связан с dependency.dll, то необходимо обратить внимание на:
1) Если вы выберете
System.load("C://Documents and Settings// TestJNI.dll");
Тогда, даже если вы поместите файл dependency.dll в папку C://Documents and Settings//, загрузка все равно завершится неудачей, поскольку зависимую dll невозможно найти. Потому что, когда jVM загружает TestJNI.dll, она сначала загружает файл библиотеки dependency.dll, от которого зависит TestJNI.dll, а dependency.dll не находится в каталоге, указанном java.library.path, поэтому jVM не может найти зависимость. .длл.
У вас есть два способа решить эту проблему: во-первых, добавьте C://Documents and Settings// в путь java.library.path, например, добавьте его в системный путь. Второе - сначала позвонить
System.load("C://Documents and Settings// dependency.dll"); Пусть jvm сначала загрузит dependency.dll, а затем вызовет System.load("C://Documents and Settings// TestJNI.dll" );
2) Если вы выберете
System.loadLibrary («ТестJNI»);
Затем вам просто нужно поместить файл dependency.dll в любой путь, включенный в java.library.path, включая тот же каталог, что и TestJNI.dll.