Ich habe an diesem Thema für zwei Tage gearbeitet, aber ich fand schließlich die Antwort. Zuerst habe ich ein Verzeichnis für Bibliotheken erstellt und die Umgebungsvariable PATH auf dieses Verzeichnis gesetzt. Ich mag es aber nicht, meinen Weg zu verstopfen, also gebe ich dir jetzt das, was ich bei http://blog.cedarsoft.com/2010/11/setting-java-library-path-programmatically/ gefunden habe. Meine Wiedergabe folgt
package yourpackage;
import java.io.File;
import java.lang.reflect.Field ;
public class YourClass {
public native void print() ;
static
{
String mPath = new File (".").getAbsolutePath() ;
String langKey = "java.library.path" ;
System.setProperty (langKey, mPath) ;
// Tested both with and without the following, and worked either way.
/* try
{
Field fieldSysPath = ClassLoader.class.getDeclaredField("sys_paths");
fieldSysPath.setAccessible(true);
fieldSysPath.set(null, null);
}
catch (NoSuchFieldException e)
{
System.err.println ("Unable to reset system path field: \n" + e + '\n') ;
}
catch (IllegalAccessException e)
{
System.err.println ("Unable to access system path after reset: \n"
+ e + '\n') ;
} */
try
{
System.loadLibrary ("YourLibrary") ;
}
catch (UnsatisfiedLinkError e)
{
System.err.println ("Native code library failed to load.\n" + e) ;
System.exit (1) ;
}
}
public static void main (String[] args)
{
YourClass yc = new YourClass() ;
yc.print();
}
}
Für den obigen Code Ihre DLL im selben Ordner wie die .java sein muss. Wenn Sie über die Befehlszeile ausgeführt werden, denken Sie daran, dass Sie aus demselben Verzeichnis für javac und root-Paketverzeichnis für Java-Aufrufe aufrufen. So für die .java ist C: \ Arbeitsplatz \ yourpackage \ YourClass.java, Sie von der Kommandozeile aufrufen:
cd "C:\workspace"
java yourpackage.YourClass
Sie könnten mit System.load betrachten(). Es benötigt einen vollständig qualifizierten Pfad und ignoriert alle Umgebungsvariablen. Es ist nur: 'System.load (" C: \\ Programme \\ Meine große Programm \\ libs \\ psjw.dll ");' Beachten Sie, dass Sie die Zeichenfolge mit dem Pfad zur Laufzeit erstellen können, so Sie können zuerst nach Dingen wie dem Benutzerverzeichnis, dem Verzeichnis, in dem Ihr Programm installiert ist, und so weiter fragen. Dies ist möglicherweise besser zu loadLibrary(), da Sie nie wissen, ob etwas in der Liste der Orte, die bereits durchsucht werden, den Namen "psjw.dll, "was dazu führen könnte, dass man eine Bibliothek lädt, die man nicht kannte. –
Danke für diesen Kommentar, wirklich gut, um die Ursache eines Problems mit einer Bibliothek zu finden –