Ниже приведен компонент JNative
jnative.sourceforge.net/ Перейдите сюда, чтобы загрузить проект JNative с открытым исходным кодом. Я скачал 1.3.2.
Разархивируйте JNative-<st1:chsdate isrocdate="False" islunardate="False" day="30" Month="12" Year="1899">1.3.2</st1:chsdate>.zip
Получите три файла, а именно: JNativeCpp.dll, libJNativeCpp.so, JNative.jar.
JNativeCpp.dll используется под Windows, скопируйте его в каталог windows/system32;
libJNativeCpp.so в Linux скопируйте в системный каталог;
JNative.jar Это пакет расширения. Импортируйте его в LIB проекта или скопируйте в jdk/jre/lib/ext, и система автоматически загрузит его.
•Инструкция по использованию
Мой проект будет использовать компоненты JNative для вызова файла TestAppSvr.dll, который проверяет состояние сервера приложений. Файл Dll содержит метод TestConnect(), который возвращает целочисленный результат (1 или 0).
Сначала настройте среду Windows компонента JNative:
Поместите JNativeCpp.dll, который Native должен использовать, в /WINDOWS/system32 на системном диске.
Импортируйте JNative.jar в проект и создайте новый вызывающий класс:
Java-код
импортировать java.io.File;
импортировать java.io.FileOutputStream;
импортировать java.io.IOException;
импортировать java.io.InputStream;
импортировать org.xvolks.jnative.JNative;
импортировать org.xvolks.jnative.Type;
импортировать org.xvolks.jnative.Exceptions.NativeException;
общественный класс AppSvrTestConnect {
общественный AppSvrTestConnect() {
}
/**
* Проверка состояния подключения к серверу приложений
*
*ТестКоннект
* @param ip IP-адрес сервера приложений
* @param порт порт
* @param intrcpt Использовать ли метод сжатия данных 1: true 0: false
* @return int 1: успех 0: неудача
* @throws NativeException
* @throws IllegalAccessException
*/
частный статический окончательный int TestConnect (String ip, int port, int intrcpt) выдает NativeException, IllegalAccessException {
JNative n = ноль;
пытаться {
n = новый JNative("TestAppSvr.dll", "TestConnect");
n.setRetVal(Тип.INT);
интервал я = 0;
n.setParameter(i++, Type.STRING, ip);
n.setParameter(i++, Type.INT, "" + порт);
n.setParameter(i++, Type.INT, "" + intrcpt);
n.invoke();
return Integer.parseInt(n.getRetVal());
} окончательно {
если (n != ноль)
n.dispose();
}
}
/**
* Укажите путь к файлу Dll, динамически загрузите локальную библиотеку ссылок и проверьте состояние подключения к серверу приложений.
* setDllPath
* @param path Путь к файлу DLL, исключая имя DLL. Например: windows - d:/test/test/ unix - root/test/test/.
* @param ip IP-адрес сервера приложений
* @param порт порт
* @param intrcpt Использовать ли метод сжатия данных 1: true 0: false
* @return int 1: успех 0: неудача
* @throws NativeException
* @throws IllegalAccessException
*/
public static Final int TestConnectFromDllPath (String path, String ip, int port, int intrcpt) выдает NativeException, IllegalAccessException {
путь += "TestAppSvr.dll";
System.load(путь);
вернуть TestConnect(ip,port,intrcpt);
}
/**
* Файл Dll размещается в каталоге JRE/bin, и ClassLoader может динамически загружать локальную библиотеку ссылок через System.loadLibrary().
* TestConnectFromDllPath
* @param ip IP-адрес сервера приложений
* @param порт порт
* @param intrcpt Использовать ли метод сжатия данных 1: true 0: false
* @return int 1: успех 0: неудача
* @throws NativeException
* @throws IllegalAccessException
*/
public static Final int TestConnectFromDllPath (String ip, int port, int intrcpt) выдает NativeException, IllegalAccessException {
System.loadLibrary("TestAppSvr");
вернуть TestConnect(ip,port,intrcpt);
}
}
Этот класс реализует статический частный метод, который используется для вызова методов в файлах Dll и возврата результатов.
частный статический окончательный int TestConnect (String ip, int port, int intrcpt)
Два статических общедоступных метода, загружающих файлы DLL двумя способами.
public static Final int TestConnectFromDllPath(String path,String ip, int port, int intrcpt) //Путь через файл DLL
public static Final int TestConnectFromDllPath(String ip, int port, int intrcpt) //Через ClassLoader Затем создайте новый класс и вызовите AppSvrTestConnect.java. Как только метод вызывается, я помещаю файл TestAppSvr.dll и Demo.java в один и тот же каталог, поэтому, получив путь к Demo.java, я могу получить путь. TestAppSvr.dll и вызовите AppSvrTestConnect.Tes Правильная информация может быть возвращена после метода tConnectFromDllPath(). Второй метод — поместить TestAppSvr.dll в каталог Jre/bin, который будет автоматически загружен в загрузчик классов JVM, а затем через System.loadLibrary("TestAppSvr"). DLL-файлы могут быть собраны.
Java-код
Строковый путь = getClass().getResource(File.separator).getPath();
путь = path.substring(1,path.length());
System.out.println(path); //Получить путь к файлу DLL
Строка ip = "192.168.0.48" //IP-адрес сервера
ИНТ порт = 221 // порт;
int intrcpt = 1 // Сжатие данных передается, 1 означает, что оно используется, 0 означает, что оно не используется;
//Метод 1. Передача пути к файлу Dll.
//int info = AppSvrTestConnect.TestConnectFromDllPath(путь, ip, порт, intrcpt);
//Метод 2. Файл Dll помещен в каталог JRE/bin.
int info = AppSvrTestConnect.TestConnectFromDllPath (ip, порт, intrcpt);
//1 — успех, 0 — неудача
если (информация == 1)
System.out.println("Сервер приложений доступен.");
еще
System.out.println("Сервер приложений недоступен, проверьте правильность IP-адреса и порта.");
возврат информации;
}
System.loadLibrary(): загрузите локальную библиотеку ссылок в каталог Windows/System32 или jre/bin или Tomcat/bin.
System.load(): добавьте локальную библиотеку ссылок в соответствии с определенным каталогом, который должен быть абсолютным путем.
•Примечание
Приведенный выше пример проекта, поскольку он является примером, не имеет особого дизайна. Он реализует только загрузку файла DLL, вызов метода файла DLL и возврат информации.
Подробные инструкции по JNative см. в исходной программе JNative и примерах.
Обратите внимание, что JVM позволяет ClassLoader по умолчанию загружать только собственную библиотеку и не предоставляет специальный API для выгрузки загруженной собственной библиотеки, поэтому при отладке проекта запускайте веб-сервер самостоятельно.