A continuación se muestra el componente JNative.
jnative.sourceforge.net/ Vaya aquí para descargar el proyecto de código abierto JNative que descargué 1.3.2.
Descomprima JNative-<st1:chsdate isrocdate="False" islunardate="False" day="30" mes="12" año="1899">1.3.2</st1:chsdate>.zip
Obtenga tres archivos, a saber: JNativeCpp.dll, libJNativeCpp.so, JNative.jar.
JNativeCpp.dll se usa en Windows, cópielo en el directorio windows/system32;
libJNativeCpp.so en Linux, cópielo al directorio del sistema;
JNative.jar Este es un paquete de extensión. Impórtelo a la LIB del proyecto o cópielo en jdk/jre/lib/ext y el sistema lo cargará automáticamente.
•Instrucciones de uso
Mi proyecto utilizará componentes JNative para llamar a un archivo TestAppSvr.dll que prueba el estado del servidor de aplicaciones. El archivo Dll contiene un método TestConnect() que devuelve un resultado entero (1 o 0).
Primero configure el entorno de Windows del componente JNative:
Coloque el JNativeCpp.dll que Native necesita usar en /WINDOWS/system32 en el disco del sistema.
Importe JNative.jar al proyecto y cree una nueva clase de llamada:
código java
importar java.io.File;
importar java.io.FileOutputStream;
importar java.io.IOException;
importar java.io.InputStream;
importar org.xvolks.jnative.JNative;
importar org.xvolks.jnative.Type;
importar org.xvolks.jnative.exceptions.NativeException;
clase pública AppSvrTestConnect {
AppSvrTestConnect público() {
}
/**
* Probar el estado de conexión del servidor de aplicaciones
*
*PruebaConectar
* IP del servidor de aplicaciones @param ip
* @param puerto puerto
* @param intrcpt Si se debe utilizar el método de compresión de datos 1: verdadero 0: falso
* @return int 1: éxito 0: fracaso
* @throws NativeException
* @throws IllegalAccessException
*/
final estático privado int TestConnect (IP de cadena, puerto int, int intrcpt) lanza NativeException, IllegalAccessException {
JNativo n = nulo;
intentar {
n = nuevo JNative("TestAppSvr.dll", "TestConnect");
n.setRetVal(Tipo.INT);
int yo = 0;
n.setParameter(i++, Tipo.STRING, ip);
n.setParameter(i++, Type.INT, "" + puerto);
n.setParameter(i++, Type.INT, "" + intrcpt);
n.invocar();
return Integer.parseInt(n.getRetVal());
} finalmente {
si (n! = nulo)
n.dispose();
}
}
/**
* Especifique la ruta del archivo Dll, cargue dinámicamente la biblioteca de enlaces local y pruebe el estado de conexión del servidor de aplicaciones
* establecerDllPath
* @param ruta La ruta al archivo DLL, excluyendo el nombre de la DLL. Por ejemplo: windows - d:/test/test/ unix - root/test/test/.
* IP del servidor de aplicaciones @param ip
* @param puerto puerto
* @param intrcpt Si se debe utilizar el método de compresión de datos 1: verdadero 0: falso
* @return int 1: éxito 0: fracaso
* @throws NativeException
* @throws IllegalAccessException
*/
public static final int TestConnectFromDllPath (ruta de cadena, ip de cadena, puerto int, int intrcpt) arroja NativeException, IllegalAccessException {
ruta += "TestAppSvr.dll";
System.load(ruta);
devolver TestConnect(ip,puerto,intrcpt);
}
/**
* El archivo Dll se coloca en el directorio JRE/bin y ClassLoader puede cargar dinámicamente la biblioteca de enlaces local a través de System.loadLibrary()
* PruebaConnectFromDllPath
* IP del servidor de aplicaciones @param ip
* @param puerto puerto
* @param intrcpt Si se debe utilizar el método de compresión de datos 1: verdadero 0: falso
* @return int 1: éxito 0: fracaso
* @throws NativeException
* @throws IllegalAccessException
*/
public static final int TestConnectFromDllPath (String ip, int port, int intrcpt) lanza NativeException, IllegalAccessException {
System.loadLibrary("TestAppSvr");
devolver TestConnect(ip,puerto,intrcpt);
}
}
Esta clase implementa un método privado estático, que se utiliza para llamar a métodos en archivos DLL y devolver resultados.
int final estático privado TestConnect (IP de cadena, puerto int, int intrcpt)
Dos métodos públicos estáticos, cargando archivos DLL de dos maneras
public static final int TestConnectFromDllPath (ruta de cadena, ip de cadena, puerto int, int intrcpt) //Ruta a través del archivo DLL
public static final int TestConnectFromDllPath(String ip, int port, int intrcpt) //A través de ClassLoader y luego creo una nueva clase, llamo a AppSvrTestConnect.java, implemento la llamada al método uno, puse el archivo TestAppSvr.dll y Demo.java en el mismo directorio, por lo que después de obtener la ruta de Demo.java, puede obtener la ruta de TestAppSvr.dll y llamar al método AppSvrTestConnect.TestConnectFromDllPath() puede devolver la información correcta. El segundo método es colocar TestAppSvr.dll en Jre/. directorio bin. Se cargará automáticamente en el Classloader de la JVM y luego el archivo DLL se podrá ensamblar a través de System.loadLibrary ("TestAppSvr").
código java
Ruta de cadena=getClass().getResource(File.separator).getPath();
ruta = ruta.substring(1,ruta.longitud());
System.out.println(path); //Obtener la ruta del archivo DLL
Cadena ip = "192.168.0.48" //IP del servidor
int puerto = 221; //puerto
int intrcpt = 1; // Se transmite la compresión de datos, 1 significa usarlo 0 significa no usarlo;
//Método 1 Pase la ruta del archivo Dll
//int info = AppSvrTestConnect.TestConnectFromDllPath(ruta, ip, puerto, intrcpt);
//Método 2 El archivo Dll se ha colocado en el directorio JRE/bin
int info = AppSvrTestConnect.TestConnectFromDllPath(ip, puerto, intrcpt);
//1 es éxito, 0 es fracaso
si (información == 1)
System.out.println("El servidor de aplicaciones está disponible.");
demás
System.out.println("El servidor de aplicaciones no está disponible, verifique si la dirección IP y el puerto son correctos.");
información de devolución;
}
System.loadLibrary(): carga la biblioteca de enlaces local en el directorio Windows/System32 o jre/bin o Tomcat/bin
System.load(): agrega la biblioteca de enlaces local de acuerdo con el directorio específico, que debe ser una ruta absoluta
•Observación
El proyecto de ejemplo anterior, debido a que es un ejemplo, no tiene mucho diseño. Solo implementa la carga del archivo DLL, llama al método del archivo DLL y devuelve información.
Para obtener instrucciones detalladas sobre JNative, consulte el programa fuente y los ejemplos de JNative.
Tenga en cuenta que la JVM solo permite que un ClassLoader predeterminado cargue la biblioteca nativa y no proporciona una API especial para descargar una biblioteca nativa cargada, por lo que al depurar el proyecto, inicie el servidor web de forma independiente.