Ci-dessous se trouve le composant JNative
jnative.sourceforge.net/ Allez ici pour télécharger le projet open source JNative que j'ai téléchargé 1.3.2.
Décompressez JNative-<st1:chsdate isrocdate="False" islunardate="False" day="30"month="12" year="1899">1.3.2</st1:chsdate>.zip
Obtenez trois fichiers, à savoir : JNativeCpp.dll, libJNativeCpp.so, JNative.jar.
JNativeCpp.dll est utilisé sous Windows, copiez-le dans le répertoire windows/system32 ;
libJNativeCpp.so sous Linux, copiez dans le répertoire système ;
JNative.jar Il s'agit d'un package d'extension. Importez-le dans la LIB du projet ou copiez-le dans jdk/jre/lib/ext, et le système le chargera automatiquement.
• Mode d'emploi
Mon projet utilisera des composants JNative pour appeler un fichier TestAppSvr.dll qui teste l'état du serveur d'applications. Le fichier Dll contient une méthode TestConnect() qui renvoie un résultat entier (1 ou 0).
Configurez d'abord l'environnement Windows du composant JNative :
Placez le JNativeCpp.dll que Native doit utiliser sous /WINDOWS/system32 sur le disque système
Importez JNative.jar dans le projet et créez une nouvelle classe appelante :
Code Java
importer java.io.File ;
importer java.io.FileOutputStream ;
importer java.io.IOException ;
importer java.io.InputStream ;
importer org.xvolks.jnative.JNative ;
importer org.xvolks.jnative.Type ;
importer org.xvolks.jnative.exceptions.NativeException ;
classe publique AppSvrTestConnect {
public AppSvrTestConnect() {
}
/**
* Tester l'état de connexion du serveur d'applications
*
*TestConnexion
* IP du serveur d'applications @param ip
* @param port port
* @param intrcpt S'il faut utiliser la méthode de compression des données 1:true 0:false
* @return int 1 : succès 0 : échec
* @throws NativeException
* @throws IllegalAccessException
*/
private static final int TestConnect (String ip, int port, int intrcpt) lance NativeException, IllegalAccessException {
JNatif n = nul ;
essayer {
n = new JNative("TestAppSvr.dll", "TestConnect");
n.setRetVal(Type.INT);
int je = 0;
n.setParameter(i++, Type.STRING, ip);
n.setParameter(i++, Type.INT, "" + port);
n.setParameter(i++, Type.INT, "" + intrcpt);
n.invoke();
return Integer.parseInt(n.getRetVal());
} enfin {
si (n != nul)
n.dispose();
}
}
/**
* Spécifiez le chemin du fichier Dll, chargez dynamiquement la bibliothèque de liens locale et testez l'état de connexion du serveur d'applications
* setDllPath
* @param path Le chemin d'accès au fichier Dll, à l'exclusion du nom de la DLL. Par exemple : windows - d:/test/test/ unix - root/test/test/.
* IP du serveur d'applications @param ip
* @param port port
* @param intrcpt S'il faut utiliser la méthode de compression des données 1:true 0:false
* @return int 1 : succès 0 : échec
* @throws NativeException
* @throws IllegalAccessException
*/
public static final int TestConnectFromDllPath (String path, String ip, int port, int intrcpt) lance NativeException, IllegalAccessException {
chemin += "TestAppSvr.dll" ;
System.load(chemin);
return TestConnect(ip,port,intrcpt);
}
/**
* Le fichier Dll est placé dans le répertoire JRE/bin et ClassLoader peut charger dynamiquement la bibliothèque de liens locale via System.loadLibrary()
* TestConnectFromDllPath
* IP du serveur d'applications @param ip
* @param port port
* @param intrcpt S'il faut utiliser la méthode de compression des données 1:true 0:false
* @return int 1 : succès 0 : échec
* @throws NativeException
* @throws IllegalAccessException
*/
public static final int TestConnectFromDllPath (String ip, int port, int intrcpt) lance NativeException, IllegalAccessException {
System.loadLibrary("TestAppSvr");
return TestConnect(ip,port,intrcpt);
}
}
Cette classe implémente une méthode privée statique, utilisée pour appeler des méthodes dans les fichiers Dll et renvoyer des résultats.
privé statique final int TestConnect (String ip, int port, int intrcpt)
Deux méthodes publiques statiques, chargeant les fichiers DLL de deux manières
public static final int TestConnectFromDllPath(String path,String ip, int port, int intrcpt) //Chemin via le fichier DLL
public static final int TestConnectFromDllPath (String ip, int port, int intrcpt) // Via ClassLoader Créez ensuite une nouvelle classe et appelez AppSvrTestConnect.java. Dès que la méthode est appelée, je mets le fichier TestAppSvr.dll et Demo.java dans le même répertoire, donc après avoir obtenu le chemin de Demo.java, je peux obtenir le chemin. de TestAppSvr.dll et appelez AppSvrTestConnect.Tes Les informations correctes peuvent être renvoyées après la méthode tConnectFromDllPath(). La deuxième méthode consiste à placer TestAppSvr.dll dans le répertoire Jre/bin, qui sera automatiquement chargé dans le Classloader de la JVM, puis via System.loadLibrary("TestAppSvr"). Les fichiers DLL peuvent être assemblés.
Code Java
String path=getClass().getResource(File.separator).getPath();
chemin = chemin.substring(1,chemin.longueur());
System.out.println(path); //Obtenir le chemin du fichier DLL
Chaîne ip = "192.168.0.48" ; //IP du serveur
port entier = 221 ; //port
int intrcpt = 1; //La compression des données est transmise, 1 signifie l'utiliser ; 0 signifie ne pas l'utiliser ;
//Méthode 1 Passer dans le chemin du fichier Dll
//int info = AppSvrTestConnect.TestConnectFromDllPath(chemin, ip, port, intrcpt);
//Méthode 2 Le fichier Dll a été placé dans le répertoire JRE/bin
int info = AppSvrTestConnect.TestConnectFromDllPath (ip, port, intrcpt);
//1 est un succès, 0 est un échec
si (info == 1)
System.out.println("Le serveur d'applications est disponible.");
autre
System.out.println("Le serveur d'applications n'est pas disponible, veuillez vérifier si l'adresse IP et le port sont corrects.");
renvoyer des informations ;
}
System.loadLibrary() : Charge la bibliothèque de liens locale sous le répertoire Windows/System32 ou jre/bin ou Tomcat/bin
System.load() : Ajoutez la bibliothèque de liens locale en fonction du répertoire spécifique, qui doit être un chemin absolu
•Remarque
L'exemple de projet ci-dessus, parce qu'il s'agit d'un exemple, n'a pas beaucoup de conception. Il implémente uniquement le chargement du fichier DLL, l'appel de la méthode du fichier DLL et le renvoi des informations.
Pour des instructions détaillées sur JNative, veuillez vous référer au programme source et aux exemples de JNative.
Notez que la JVM permet uniquement à un ClassLoader par défaut de charger une bibliothèque native et ne fournit pas d'API spéciale pour décharger une bibliothèque native chargée. Par conséquent, lors du débogage du projet, démarrez le serveur Web indépendamment.