Java3D als Applet ohne Installation von Java3d

krel

Mitglied
Hallo zusammen,

jetzt kommen ich noch mit einer weiteren Frage zu euch. Wie kann ich meine Anwendung so verpacken, sodass sie auch ohne eine Installation von Java3d läuft. Irgendwo muss ich ja die 3 DLLs unterbringen. Aber nach vielem suchen habe ich noch nichts hilfreiches gefunden. Hat jemand einen Tipp?

Gruß
 
ich glaube das wird nichts aus dem einfachen grund das java nur physisch auf der platte existierende lib-files wie DLL oder SO einbinden kann *hat was mit dem zu grunde liegenden c/c++ loader-code zu tun* ...

und eine lib "zu installieren" ist so auch nicht ganz korrekt ... mann muss lediglich bei start einer app sicherstellen das die nötigen parameter gesetzt sind um die libs zu finden ...
 
Hi,

eigentlich sollte es ja mit nem signierten Applet funktionieren, da ich dann ja auf das Dateisystem zugreifen kann und auch Datei speichern kann. Das ist aber ein anderes Problem.

Ich habe meine Simulation jetzt erstmal in einen JFrame gepackt und will es direkt als jar auf dem System starten.
Derzeit versuche ich die DLLs einfach aus dem JAR zu extrahieren und beim Start der jar mittels
Code:
java -jar Magnetsimu.jar -Djava.library.path="${java.io.tmpdir}magnet
den library path zu setzen. Die Ausgabe von
Code:
System.out.println(System.getProperty("java.libray.path")
liefert aber immer das gleiche und der Start scheitert natürlich. Woran kann es liegen, dass das einfach irgnoriert wird?

Gruß
 
also wenn du das als runnable jar ausliefern willst kannst du dir das auch einfacher machen in dem du wie schon beschrieben die daten zum start temp exportierst und dann mit System.load(String) erst während der laufzeit nachlädst ... *sollte natürlich gesehen bevor klassen mit native-code instanziert werden* ...

wäre im übrigen auch der weg für ein signiertes applet
 
leider scheint java3d die Libs nochmals direkt laden zu wollen, denn ich bekomme trotz dessen, dass ich die Library vorher geladen habe folgende Fehlermeldung:
Exception in thread "main" java.lang.UnsatisfiedLinkError: no j3dcore-ogl in java.library.path

jemand ne Idee dazu? Bzw. wie muss ich denn beim starten den library path setzen
 
Hi,

was mit dem Fehler gemeint ist, ist mir schon klar. Mein Ziel ist es für Windows 32bit und 64bit die gleiche Jar zu verwenden, die entsprechend des Systems die entsprechenden DLLs irgendwo (am bestens ins Temp-Verzeichnis) entpackt und ich das Programm ohne Installation von Java3D benutzen kann.
Folgender Code extrahiert die DLLs aus der Jar und speichert sie im Temp Verzeichnis und lädt anschließend die Library. Hierbei gibt es auch keinerlei Fehler.
[JAVA=75]
private void extractDLL(String pkg, String[] files) {
String tmp = System.getProperty("java.io.tmpdir");
tmp += (tmp.endsWith(File.separator)) ? "magnet" : File.separator + "magnet";
byte[] buffer = new byte[1024];

if (!new File(tmp).exists()) {
new File(tmp).mkdirs();
}

for (String file : files) {
try {
InputStream in = getClass().getResourceAsStream(pkg + file);
OutputStream out = new FileOutputStream(tmp + File.separator + file);
while (in.read(buffer) != -1) {
out.write(buffer);
}
out.close();
in.close();
} catch (FileNotFoundException ex) {
Logger.getLogger(Magnetsimu.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(Magnetsimu.class.getName()).log(Level.SEVERE, null, ex);
}
//m System.out.println(tmp + File.separator + file);
System.load(tmp + File.separator + file);
}
}
[/code]
Nun ist es aber scheinbar so, dass Java3D beim ersten Aufruf auch nochmal versucht die Libraries zu laden aber scheinbar mit
Code:
System.loadLibrary(...)
denn es kommt die bereits gepostete Fehlermeldung auf.
Die Frage ist, mach ich was falsch oder liegt es an Java3D?
 

Zurück
Oben