Unten ist die JNative-Komponente
jnative.sourceforge.net/ Gehen Sie hier, um das JNative Open Source-Projekt herunterzuladen, das ich 1.3.2 heruntergeladen habe
Entpacken Sie JNative-<st1:chsdate isrocdate="False" islunardate="False" day="30"month="12" year="1899">1.3.2</st1:chsdate>.zip
Erhalten Sie drei Dateien, nämlich: JNativeCpp.dll, libJNativeCpp.so, JNative.jar.
JNativeCpp.dll wird unter Windows verwendet. Kopieren Sie es in das Verzeichnis „windows/system32“.
libJNativeCpp.so unter Linux in das Systemverzeichnis kopieren;
JNative.jar Dies ist ein Erweiterungspaket. Importieren Sie es in die Projekt-LIB oder kopieren Sie es nach jdk/jre/lib/ext, und das System lädt es automatisch.
•Gebrauchsanweisung
Mein Projekt verwendet JNative-Komponenten, um eine TestAppSvr.dll-Datei aufzurufen, die den Status des Anwendungsservers testet. Die DLL-Datei enthält eine TestConnect()-Methode, die ein ganzzahliges Ergebnis (1 oder 0) zurückgibt.
Konfigurieren Sie zunächst die Windows-Umgebung der JNative-Komponente:
Platzieren Sie die JNativeCpp.dll, die Native verwenden muss, unter /WINDOWS/system32 auf der Systemfestplatte
Importieren Sie JNative.jar in das Projekt und erstellen Sie eine neue aufrufende Klasse:
Java-Code
java.io.File importieren;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import org.xvolks.jnative.JNative;
import org.xvolks.jnative.Type;
import org.xvolks.jnative.Exceptions.NativeException;
öffentliche Klasse AppSvrTestConnect {
public AppSvrTestConnect() {
}
/**
* Testen Sie den Verbindungsstatus des Anwendungsservers
*
*TestConnect
* @param ip Anwendungsserver-IP
* @param Port-Port
* @param intrcpt Ob die Datenkomprimierungsmethode 1:true 0:false verwendet werden soll
* @return int 1: Erfolg 0: Fehler
* @throws NativeException
* @throws IllegalAccessException
*/
private static final int TestConnect(String ip, int port, int intrcpt)throws NativeException, IllegalAccessException {
JNative n = null;
versuchen {
n = new JNative("TestAppSvr.dll", "TestConnect");
n.setRetVal(Type.INT);
int i = 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());
} Endlich {
if (n != null)
n.dispose();
}
}
/**
* Geben Sie den DLL-Dateipfad an, laden Sie die lokale Linkbibliothek dynamisch und testen Sie den Verbindungsstatus des Anwendungsservers
* setDllPath
* @param path Der Pfad zur DLL-Datei, ohne den DLL-Namen. Beispiel: Windows – d:/test/test/ unix – root/test/test/.
* @param ip Anwendungsserver-IP
* @param Port-Port
* @param intrcpt Ob die Datenkomprimierungsmethode 1:true 0:false verwendet werden soll
* @return int 1: Erfolg 0: Fehler
* @throws NativeException
* @throws IllegalAccessException
*/
public static final int TestConnectFromDllPath(String path,String ip, int port, int intrcpt) löst NativeException, IllegalAccessException{ aus
path += "TestAppSvr.dll";
System.load(path);
return TestConnect(ip,port,intrcpt);
}
/**
* Die DLL-Datei wird im JRE/bin-Verzeichnis abgelegt, und ClassLoader kann die lokale Linkbibliothek dynamisch über System.loadLibrary() laden
* TestConnectFromDllPath
* @param ip Anwendungsserver-IP
* @param Port-Port
* @param intrcpt Ob die Datenkomprimierungsmethode 1:true 0:false verwendet werden soll
* @return int 1: Erfolg 0: Fehler
* @throws NativeException
* @throws IllegalAccessException
*/
public static final int TestConnectFromDllPath(String ip, int port, int intrcpt) löst NativeException, IllegalAccessException{ aus
System.loadLibrary("TestAppSvr");
return TestConnect(ip,port,intrcpt);
}
}
Diese Klasse implementiert eine statische private Methode, die zum Aufrufen von Methoden in DLL-Dateien und zur Rückgabe von Ergebnissen verwendet wird.
private static final int TestConnect(String ip, int port, int intrcpt)
Zwei statische öffentliche Methoden, die DLL-Dateien auf zwei Arten laden
public static final int TestConnectFromDllPath(String path,String ip, int port, int intrcpt) //Pfad durch die DLL-Datei
public static final int TestConnectFromDllPath(String ip, int port, int intrcpt) //Durch ClassLoader Erstellen Sie dann eine neue Klasse und rufen Sie AppSvrTestConnect.java auf. Sobald die Methode aufgerufen wird, lege ich die Datei TestAppSvr.dll und Demo.java in dasselbe Verzeichnis, sodass ich den Pfad erhalten kann, nachdem ich den Pfad von Demo.java erhalten habe von TestAppSvr.dll und rufen Sie AppSvrTestConnect.Tes auf Die korrekten Informationen können nach der Methode tConnectFromDllPath() zurückgegeben werden. Die zweite Methode besteht darin, TestAppSvr.dll im Jre/bin-Verzeichnis zu platzieren, das automatisch in den Classloader der JVM geladen wird, und dann über System.loadLibrary("TestAppSvr"). DLL-Dateien können zusammengestellt werden.
Java-Code
String path=getClass().getResource(File.separator).getPath();
path = path.substring(1,path.length());
System.out.println(path); //Den Pfad der DLL-Datei abrufen
String ip = "192.168.0.48"; //Server-IP
int port = 221; //port
int intrcpt = 1; // Datenkomprimierung wird übertragen, 1 bedeutet, sie zu verwenden, 0 bedeutet, sie nicht zu verwenden
//Methode 1 Übergeben Sie den Pfad der DLL-Datei
//int info = AppSvrTestConnect.TestConnectFromDllPath(path, ip, port, intrcpt);
//Methode 2 Die DLL-Datei wurde im Verzeichnis JRE/bin abgelegt
int info = AppSvrTestConnect.TestConnectFromDllPath(ip, port, intrcpt);
//1 ist Erfolg, 0 ist Misserfolg
if (info == 1)
System.out.println("Anwendungsserver ist verfügbar.");
anders
System.out.println("Der Anwendungsserver ist nicht verfügbar, bitte überprüfen Sie, ob die IP-Adresse und der Port korrekt sind.");
Rückgabeinformationen;
}
System.loadLibrary(): Laden Sie die lokale Linkbibliothek im Verzeichnis Windows/System32 oder jre/bin oder Tomcat/bin
System.load(): Fügen Sie die lokale Linkbibliothek entsprechend dem spezifischen Verzeichnis hinzu, bei dem es sich um einen absoluten Pfad handeln muss
•Bemerkung
Das obige Beispielprojekt hat, da es sich um ein Beispiel handelt, nicht viel Design. Es implementiert nur das Laden der DLL-Datei, den Aufruf der DLL-Dateimethode und die Rückgabe von Informationen.
Ausführliche Anweisungen zu JNative finden Sie im JNative-Quellprogramm und in den Beispielen.
Beachten Sie, dass die JVM nur einem Standard-ClassLoader das Laden einer nativen Bibliothek zulässt und keine spezielle API zum Entladen einer geladenen nativen Bibliothek bereitstellt. Starten Sie daher beim Debuggen des Projekts den Webserver unabhängig.