Laden externer nativer Bibliotheken in die JVM zur Laufzeit in Java 21Java

Java-Forum
Guest
 Laden externer nativer Bibliotheken in die JVM zur Laufzeit in Java 21

Post by Guest »

Ich möchte zur Laufzeit eine externe Bibliothek (z. B. \Lic\64bit), die einige DLL-Dateien enthält, in die JVM laden. Reflection und FFM (Java Foreign Function Memory API) können nicht ebenfalls verwendet werden.
Ich habe es mit einigen Methoden versucht, aber die Bibliothek wird immer noch nicht richtig geladen.
Schließlich habe ich festgestellt, dass es eine private statische Aufladung gibt letzte Variable namens JAVA_LIBRARY_PATH. Daher kann ich das nicht ändern, da es sich um eine endgültige Variable handelt.
Ich habe die folgende Implementierung bereits ausprobiert.

Code: Select all

private static void loadAllDLLs(String libraryPathToAdd) {
final String[] userPath = initializePath("java.library.path");
String ps = System.getProperty("path.separator");
//check if the path to add is already present
for (String path : userPath) {
if (path.equals(libraryPathToAdd)) {
return;
}
}

StringBuilder pathBuilder = new StringBuilder();
for (String pathToAdd : userPath) {
pathBuilder.append(pathToAdd).append(ps);
}
pathBuilder.append(libraryPathToAdd);

// Update java.library.path once with all paths
String finalPath = pathBuilder.toString();
System.setProperty("java.library.path", finalPath);

String[] newUserPath = initializePath("java.library.path");
for (String up : newUserPath) {
System.out.println("New User Path ----> " + up);
}
}
Aber dann habe ich versucht, mit
zu überprüfen, ob die Bibliothek erfolgreich geladen wurde

Code: Select all

private static void loadLibraries() {
String libraryPath = System.getProperty("java.library.path");
System.out.println("java.library.path: " + libraryPath);

try {
System.loadLibrary("webcam-capture-driver-native-64");
System.out.println("Library loaded successfully.");
} catch (UnsatisfiedLinkError e) {
System.err.println("Failed to load library: " + e.getMessage());
}
}

Code: Select all

System.out.println("java.library.path: " + libraryPath);
zeigt, dass die Bibliothek, die „webcam-capture-driver-native-64“ enthält, zur Eigenschaft java.library.path hinzugefügt wurde. Wenn Sie jedoch die Bibliothek mit System.loadLibrary("webcam-capture-driver-native-64"); laden, wird die Ausnahme angezeigt, dass die Bibliothek nicht gefunden werden konnte.
Ist das schon jemandem passiert oder hat jemand eine Idee, damit umzugehen?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post