Natives aus JAR

Strotzchen

Grünschnabel
Hallo zusammen

Ich bin gerade dran mit Ardor3D ein Projekt zu machen.
Von Eclipse aus kann ich alles tip top starten. Aber sobald ich das Projekt als Runnable Jar exportiere, findet er LWJGL nicht mehr.
Wenn ich das .jar entpacke, sehe ich, dass die DLLs drin sind, aber er kann sie nicht laden.
Wenn ich es manuell versuche via System#loadLibrary, funktioniert es in Eclipse aber vom jar aus findet er dann die Main Klasse nicht mehr....

Was mache ich falsch?

Vielen Dank für eure Hilfe
 
Wie sieht der Code aus, mit dem du die DLL lädtst?

Die Ursache scheint zu sein, dass der ClassLoader die DLL standardmäßig nicht im JAR-File sucht, und ich weiß auch nicht, ob er die DLL von dort überhaupt laden kann. Ich würde die DLL in einen temporären Ordner oder die Anwendungsdaten kopieren und von dort aus laden.

Bei mir funktioniert es, wenn ich folgenden Code nutze:
(JNA als JNI-Wrapper und der DLL K8055D
Java:
File library_K8055D; // natürlich vorher initialisiert, z.B. mit new File("C:\\K8055D.dll")
Native.register(library_K8055D.getCanonicalPath());
 
Ich habe verschiedene Varianten ausprobiert, eine davon ist

Java:
System.loadLibrary("natives/lwjgl64.dll");

Es hat keine Variante funktioniert.
Deine Idee, die DLLs rauszukopieren klingt gut, nur wie lösche ich sie wieder?
Während dem meine App noch läuft kann ich dieses ja nicht mer löschen.
 
Per ShutdownHook:
Java:
Runtime.getRuntime().addShutdownHook(thread);
wobei thread ein beliebiger Thread ist, der beim Beenden deines Programmes gestartet wird.
! Operationen in einem ShutdownHook dürfen nicht zu lange dauern, da das Programm sonst vom Betriebssystem "vernichtet" wird, d.h. ein Ende des Prozesses erzwungen wird.
 
Zurück