[JOGL]Libs und Dlls mitliefern:

Ulathar

Aktives Mitglied
Hallo,
bin neu hier und hoffe, dass dieses Unterforum zur Fragestellung passt.

Es geht um folgendes:
Ich schreibe gerade mein erstes Javaprogramm welches an stelle von Java2D/3D auf JOGL setzt.
Soweit alles kein problem, auf meinem Entwicklungspc funktioniert auch alles wie ich mir das Vorstelle.

Mein Problem ist nun, dass ich das Programm an der Uni benutzen will/muss und auf diesen Rechnern habe ich keine schreibrechte auf den Ordnern in denen das JRE installiert ist.
Ich kann also nicht die jogl.dll in den "...jre6\bin" kopieren.

Ergo verweigert mein Programm den Dienst.
Ich habe daraufhin probiert die jogl.dll ebenso wie die jogl.jar fest in das jar meines Programms zu integrieren, bei dem jar-File ist dies auch kein großes Problem,
aber ich bekomme es einfach nicht hin, dass ich die .dll im .jar file "mitliefern" kann.

Auch das mitliefern als separate Datei scheint nicht zu funktionieren, bekomme immer eine Unsatisfied Exception, dass er die jogl.dll im java.library.path oder so ähnlich nicht finden/laden kann.

Hatte darauf hin auch mit System.loadlibrary(); rumprobiert aber kontne auch damit keinen Erfolg erzielen.


Hat jemand ne Idee wie ich dieses Problem löse kann, so dass ich einfach ein runable jar "ausliefern" kann, welches auf Systemen läuft wo nur ein JRE installiert ist?



EDIT:
Achso und bevor es jemand vorschlägt, das selbe Problem hätte ich auch wenn ich statt JOGL Java3D benutze, da auch hier sowohl eine .dll als auch eine .jar benötigt werden (wenn ich nix übersehen habe...).
Wundert mich gerade, hätte gedacht, dass zumindest Java3D "out of the box" bei nem aktuellen JRE dabei wäre.


Update:

Okay das mit dem System.loadlibrary() hat sich geklärt, scheinbar muss ich nur "jogl" statt "jogl.dll" angeben.

Damit klappt es wenn ich die .dll Datei im selben Verzeichnis liegen habe wie die .jar Datei!
Jetzt würde mich nur noch interessieren ob/wie ich die .dll Datei in das runable JAR Packen kann (und auf diese zugreifen kann), denn das scheint nicht zu funktionieren!
 
Zuletzt bearbeitet:

Ulathar

Aktives Mitglied
hmm ich werds mir mal ansehen, danke...

aber kann es sein, dass ich die dlls NICHT umbenennen darf?
die "idee" war eigendlich eine jogl_x64.dll und eine jogl_x86.dll im verzeichnis liegen zu haben und dann über ne if abfrage je nach arch type die passende zu laden.

aber ich erhalte dann immer ne unsatisfied exception von wegen "keine jogl.dll geladen" (logisch, weil die anders heißen).
benenne ich sie weider in jogl.dll um meckert er nicht mehr, kann so aber nicht mehr gewährleisten, dass mein programm in einer 64bit vm als auch einer 32bit vm läuft :(.

Bei System.loadLibrary() darf man ja keine "\" oder "/" mit angeben :( (zumindest meckert er immer von wegen file seperators not allowed).
 
G

Guest2

Gast
Nein, dlls umbenennen ist im Allgemeinen keine gute Idee. Wenn Du einen Pfad mit angeben willst, musst Du System.load() statt System.loadLibrary() nutzen. (Eben wie im Beispiel)

Gruß,
Fancy
 

Ulathar

Aktives Mitglied
Sorry wegen Doppelpost, aber es hat sich ein neues "Problem" ergeben, weshalb ich es nicht umbedingt in einen Edit packen wollte:

Wenn ich aus meinem Projekt nen runable jar erzeuge (ohne die dlls im jar) und die .dlls in den selben ordner lage, wo auch das Jar liegt, funktioniert das Programm nicht mehr (findet die dlls offensichtlich wieder nicht).
Wenn ich aber das Programm mit identischen Pfaden/Ordnerstrukturen aus Eclipse heraus ausführe, findet es die dlls und funktioniert tadellos.

Jemand ne idee wo mein denkfehler ist?
Herje wieso muss das mit den dlls auch so kompliziert sein -.- alles andere is doch auch "Kinderleicht" :).



Und wenn ich dem oben geposteten Tutorial für den DLL loader folge, erhalte ich bei

Java:
Native.class.getClassLoader().getResourceAsStream(lib)

ständig "null" für den input stream.


Hier mal der code meiner main-class, keine ahnung wieso das nicht klappt :(. ist eigendlich 1:1 wie in dem tutorial!

Java:
/**
 * 
 */
package main;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import gui.MainFrame;

import javax.swing.SwingUtilities;



/**
 * @author Ulathar
 *
 */
public class Start {

	private static MainFrame gui;	
    private static Set<File> loadedLibs = Collections.synchronizedSet(new HashSet<File>());

    
    
    /**
     * 
     * @param is
     * @param prefix
     * @param ending
     * @throws IOException
     */
    public static void load(final InputStream is, final String prefix, final String ending) throws IOException {

        final File file = File.createTempFile(prefix + "-", "." + ending);
        final FileOutputStream fos = new FileOutputStream(file);

        int n;
        final byte buffer[] = new byte[4096];
        System.out.println("huh2?: "+ is);
        while ((n = is.read(buffer)) != -1)
        	System.out.println("huh?");
            fos.write(buffer, 0, n);

        fos.close();

        System.load(file.getAbsolutePath());

        loadedLibs.add(file);
        file.deleteOnExit();

    }

    
    
    /**
     * 
     */
    public static void deleteDLLLoaderFiles() {

        final List<Object> libs = getDLLLoaderLibsFromClassLoader();

        if (libs != null)
            for (final Object lib : libs)
                try {

                    final Field name = lib.getClass().getDeclaredField("name");
                    name.setAccessible(true);
                    final File file = new File((String) name.get(lib));

                    if (loadedLibs.contains(file)) {

                        final Method m = lib.getClass().getDeclaredMethod("finalize", new Class[0]);
                        m.setAccessible(true);
                        m.invoke(lib, new Object[0]);

                        if (file.exists())
                            file.delete();

                    }

                } catch (final Exception e) {

                    e.printStackTrace();

                }

    }


    
    /**
     * 
     * @return
     */
    @SuppressWarnings("unchecked")
    private static List<Object> getDLLLoaderLibsFromClassLoader() {

        List<Object> libs = null;

        try {

            final ClassLoader cl = Start.class.getClassLoader();
            final Field field = ClassLoader.class.getDeclaredField("DLLLoaderLibraries");
            field.setAccessible(true);
            libs = (List<Object>) field.get(cl);

        } catch (final Exception e) {

            e.printStackTrace();

        }

        return libs;

    }
	
	
    
	/**
	 * @param args
	 */
	public static void main(String[] args) throws IOException {
		
		//final String[] libs = { "gluegen-rt.dll", "newt.dll", "DLLLoaderwindow_awt.dll", "jogl_desktop.dll", "jogl_es1.dll", "jogl_es2.dll", "jogl_gl2es12.dll" };
		final String[] libs = { "jogl.dll" };
		
		for (final String lib : libs)
            Start.load(Start.class.getClassLoader().getResourceAsStream(lib), "jogl", "dll");
		
		


		try {
			SwingUtilities.invokeAndWait(new Runnable() {
				public void run() {
					gui = new MainFrame();
					gui.setVisible(true);
				}		
			});
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		System.out.println("Und ende!");
        // cleanup before exit
        deleteDLLLoaderFiles();
	}
}

das erzeugt ständig
Exception in thread "main" java.lang.NullPointerException
at main.Start.load(Start.java:50)
at main.Start.main(Start.java:138)

Da der bereits oben zitierte part mit dem Classloader ständig null ist.
 
Zuletzt bearbeitet:
G

Guest2

Gast
Wenn ich aus meinem Projekt nen runable jar erzeuge (ohne die dlls im jar) und die .dlls in den selben ordner lage, wo auch das Jar liegt, funktioniert das Programm nicht mehr (findet die dlls offensichtlich wieder nicht).
Wenn ich aber das Programm mit identischen Pfaden/Ordnerstrukturen aus Eclipse heraus ausführe, findet es die dlls und funktioniert tadellos.

Das liegt am java.library.path. Insbesondere wenn Du dein jar per doppel Klick starten möchtest, liegen die dlls wahrscheinlich nicht in diesem. Problemloser ist imho der Weg aus dem Beispiel oben (yc021).


Da der bereits oben zitierte part mit dem Classloader ständig null ist.

Liegen die dlls den dabei im jar? Und wenn, wo?

Wenn Du nur "jogl.dll" angibst, muss die jogl.dll auch direkt im jar liegen. Du kannst auch z.B. "native/win32/jogl.dll" angeben, dann muss die dll entsprechend in diesem Unterverzeichnis des jar liegen. Die jogl.dll alleine reicht auch imho nicht, Du wirst auch vorher noch die gluegen-rt.dll brauchen.

Gruß,
Fancy
 

Ulathar

Aktives Mitglied
derzeit führe ich das ganze projekt direkt aus eclipse aus, da ich ja noch am testen/entwickeln bin.

und die dlls liegen in diesem fall in "workingdirectory/lib/x86/jogl.dll".
die selbe struktur würde dann natürlich auch im jar vorliegen (also lib/x86/jogl.dll).
 
G

Guest2

Gast
Dann sollte das vermutlich etwa so bei Dir aussehen:

Java:
final String[] libs = { "lib/x86/gluegen-rt.dll", "lib/x86/jogl.dll" };

(Kann sein, dass da auch noch die jogl_awt.dll geladen werden muss, ich weis nicht, welche jogl Version Du nutzt.)

Außerdem muss "lib" in Eclipse dann als zusätzliches src Verzeichnis definiert sein. (Bzw. in src/main/resources liegen, wenn Maven verwendet wird). Dann liegt es für Eclipse im classpath und kann damit vom Classloader geladen werden.

Gruß,
Fancy
 

Ulathar

Aktives Mitglied
aaah ok der letze hinweis mit dem src folder könnte der knackpunkt gewesen sein.
werd das "die tage" mal ausprobieren sobald ich das nächste mal an dem projekt sitze und mich dann noch mal melden obs geholfen hat.

ich nutze noch eine asbachuralt version von jogl (die 1.0) dort gibt es nur die jogl.jar und jogl.dll :).
tendiere aber dazu auf die aktuelle 2.0 beta zu wechseln bei gelegenheit.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
BattleMaster246 Jogl Libs werden nicht geladen Spiele- und Multimedia-Programmierung 5
E JOGL kein zugriff auf manche methoden Spiele- und Multimedia-Programmierung 5
A Spielfelder erstellen mit Jogl Java durch ein Koordinaten Array Spiele- und Multimedia-Programmierung 1
M [JOGL] Maus über einem gezeichnetem Objekt abfragen? Spiele- und Multimedia-Programmierung 5
M [JOGL] eclipse export Runnable Jar - startet nicht Spiele- und Multimedia-Programmierung 3
D [JOGL] bibliothek aus jar laden Spiele- und Multimedia-Programmierung 3
A JOGL Shader Anfängerprobleme Spiele- und Multimedia-Programmierung 2
A JOGL FloatBuffer vs Buffers Spiele- und Multimedia-Programmierung 2
A JOGL glBindBuffer einmalig oder mehrmalig? Spiele- und Multimedia-Programmierung 3
A Aufbau einer JOGL Anwendung Spiele- und Multimedia-Programmierung 12
Z lwjgl oder jogl nutzen Spiele- und Multimedia-Programmierung 9
A Jogl-Projekt unter 32-Bit kompiliert und unter 64-Bit ausführen, geht das überhaubt ?? Spiele- und Multimedia-Programmierung 9
turing JOGL Cubes performant Spiele- und Multimedia-Programmierung 17
M JOGL Cubus mit Rand darstellen Spiele- und Multimedia-Programmierung 3
T JOGL 2D Objekte drehen rotate Spiele- und Multimedia-Programmierung 4
X JOGL - wie zum laufen bringen? Spiele- und Multimedia-Programmierung 2
M Schatten mit JOGL Spiele- und Multimedia-Programmierung 4
D [JOGL 2.0] Kleines Problem mit freier Flugsteuerung Spiele- und Multimedia-Programmierung 3
U [JOGL 1.1.1a]Kleines Problem mit Text Overlays: Spiele- und Multimedia-Programmierung 19
D [JOGL] Freibewegliche Lichtquelle im Raum Spiele- und Multimedia-Programmierung 4
H JOGL 2.0 jars fehlen Spiele- und Multimedia-Programmierung 8
R JOGL: glUniformLocation gibt immer -1 zurück Spiele- und Multimedia-Programmierung 4
BattleMaster246 Problem mit Jogl Spiele- und Multimedia-Programmierung 14
Mikescher [JOGL] Access restriction Spiele- und Multimedia-Programmierung 6
K jogl einbinden Spiele- und Multimedia-Programmierung 6
X JOGL - Textur auf Quad verzerrt Spiele- und Multimedia-Programmierung 2
X JOGL - 2D Sprite richtig platzieren Spiele- und Multimedia-Programmierung 4
T JOGL im OrthoMode und Texturen verfärben sich Spiele- und Multimedia-Programmierung 3
J JOGL konfigurieren / Windows 7 64-bit Spiele- und Multimedia-Programmierung 7
R JOGL polygon smooth Spiele- und Multimedia-Programmierung 20
J [JOGL] Kamera zentrieren über Achse Spiele- und Multimedia-Programmierung 4
BattleMaster246 Schussrichtung festlegen - JOGL Spiele- und Multimedia-Programmierung 8
A [JOGL] TextRenderer malt Fläche hinter Buchstaben aus Spiele- und Multimedia-Programmierung 2
V Jogl: Objekt trotz Rotation immer in gleiche Richtung bewegen Spiele- und Multimedia-Programmierung 5
S JOGL Perspektive Spiele- und Multimedia-Programmierung 2
R 2D Grafik JOGL Spiele- und Multimedia-Programmierung 18
D jogl downloaden ... wo? Spiele- und Multimedia-Programmierung 3
S JOGL 64 bit Spiele- und Multimedia-Programmierung 7
A jogl 2d performance Spiele- und Multimedia-Programmierung 20
J JOGL mit Netbeans Spiele- und Multimedia-Programmierung 3
S Jogl findet keine GLProfile ? Spiele- und Multimedia-Programmierung 6
C Frage zu Ray-Picking mit JOGL Spiele- und Multimedia-Programmierung 13
F Game mit LWJGL/JOGL in executable JAR packen, wie? Spiele- und Multimedia-Programmierung 6
D Jogl:Textur auf GLUquadric wird vertikal spiegelverkehrt dargestellt Spiele- und Multimedia-Programmierung 2
F LWJGL Smoother animieren lassen (wie bei JOGL = Animator) Spiele- und Multimedia-Programmierung 3
F JOGL 2.0 Bug? Spiele- und Multimedia-Programmierung 3
F Jogl oder Java3D ? Spiele- und Multimedia-Programmierung 20
N Ein paar fragen zu JOGL Spiele- und Multimedia-Programmierung 4
M JOGL - Mehr als nur ein Canvas - Texturpool Spiele- und Multimedia-Programmierung 7
S Jogl, no gluegen-rt :-( Spiele- und Multimedia-Programmierung 4
BattleMaster246 Pong - JOGL Spiele- und Multimedia-Programmierung 2
I JOGL: Problem mit Blending bei Billboards (Transparenz) Spiele- und Multimedia-Programmierung 2
1 JOGL: Fensterinhalt verschwindet sofort wieder Spiele- und Multimedia-Programmierung 3
jemandzehage JOGL 3D-Koordinaten des Klicks bestimmen Spiele- und Multimedia-Programmierung 2
P Erkennen auf welche Objekte gezeigt wird in JoGL Spiele- und Multimedia-Programmierung 6
E JOGL nur weißes Fenster Spiele- und Multimedia-Programmierung 2
Y 3D Koordinatensystem==> JOGL Spiele- und Multimedia-Programmierung 7
Y JOGL / OPENGL in Frame Spiele- und Multimedia-Programmierung 11
A JOGL Würfel hat durchsichtige Seiten? Spiele- und Multimedia-Programmierung 13
N Jogl Probleme mit dem Buffer beim laden einer Textur Spiele- und Multimedia-Programmierung 2
A Bewegungen mit JOGL Spiele- und Multimedia-Programmierung 12
P JOGL Button-klick-Problem Spiele- und Multimedia-Programmierung 2
S Jogl Problem bei Darstellung Spiele- und Multimedia-Programmierung 9
G JOGL Color stimmt nicht Spiele- und Multimedia-Programmierung 3
S JOGL Maven Dependency Spiele- und Multimedia-Programmierung 7
Developer_X JOGL - Sichtweite Spiele- und Multimedia-Programmierung 3
Developer_X JOGL Texturing Spiele- und Multimedia-Programmierung 31
Developer_X JOGL- Ich möchte mitmachen! Spiele- und Multimedia-Programmierung 23
X JOGL GL Kontext Initialisierung Spiele- und Multimedia-Programmierung 3
X Vertex Buffer Objects mit JOGL Spiele- und Multimedia-Programmierung 7
A JOGL / OpenGL Spiele- und Multimedia-Programmierung 7
P JOGL Cubemap Spiele- und Multimedia-Programmierung 7
P JOGL Installation Spiele- und Multimedia-Programmierung 15
J JOGL - Bild wird immer wieder weiß Spiele- und Multimedia-Programmierung 2
Antoras J3D / JME oder JOGL Spiele- und Multimedia-Programmierung 2
P GLSL in JOGL Spiele- und Multimedia-Programmierung 15
S jogl ins system einbinden Spiele- und Multimedia-Programmierung 3
W JOGL bleibt nach display() in PaintArea.paintComponent hängen Spiele- und Multimedia-Programmierung 5
S java /jogl /Texturen mit j3d Spiele- und Multimedia-Programmierung 3
S JOGL Fonts Spiele- und Multimedia-Programmierung 4
S JOGL Selection By Color Spiele- und Multimedia-Programmierung 3
E JOGL und TextRenderer Spiele- und Multimedia-Programmierung 9
H JoGL mit Anwendung verteilen... Spiele- und Multimedia-Programmierung 9
0x7F800000 weiß einer wozu ANTLR beim build von JOGL verwendet wird? Spiele- und Multimedia-Programmierung 3
H Jogl-Animator - Inhalt ändert sich nicht Spiele- und Multimedia-Programmierung 4
S JOGL + Multithreading Spiele- und Multimedia-Programmierung 2
P Probleme mit Vista und JOGL Spiele- und Multimedia-Programmierung 2
J Alpha Blending (jogl) Spiele- und Multimedia-Programmierung 5
G JOGL - glTranslate - Unterschiede bei zweimal Ausführen Spiele- und Multimedia-Programmierung 9
Kr0e Schattenproblem, JOGL, gluPerspective. Spiele- und Multimedia-Programmierung 2
J OpenGL (JOGL) - Radial Blur Effekt (Glow) Spiele- und Multimedia-Programmierung 2
J jogl - verschiedene Versionen Spiele- und Multimedia-Programmierung 7
Kr0e "gluSphere" (JOGL) soll Schatten werfen können Spiele- und Multimedia-Programmierung 5
A JOGL, Models Spiele- und Multimedia-Programmierung 4
A JOGL, etwas Grundlegendes Spiele- und Multimedia-Programmierung 8
Kr0e JOGL & Anpassung ins Fenster Spiele- und Multimedia-Programmierung 2
G JOGL: per Mausbewegung Objekt verschieben Spiele- und Multimedia-Programmierung 2
S In JOGL Java einbauen Spiele- und Multimedia-Programmierung 5
S Java 3D, JOGL, . Spiele- und Multimedia-Programmierung 3
P JOGL: mit glTranslated wird nichts gezeichnet Spiele- und Multimedia-Programmierung 3

Ähnliche Java Themen

Neue Themen


Oben