Opengl Texture laden Null Pointer Exception

Status
Nicht offen für weitere Antworten.

JavaKing

Mitglied
Hallo,

ich habe gerade mit einem merkwürdigem Problem zu kämpfen. Und zwar lade ich mit folgender Routine eine Texture:

Code:
    // Texturenvariablen festlegen
    Texture seite;

            seite = TextureIO.newTexture(getClass().getResource("bild1.jpg"), true, null); 
            seite.setTexParameteri(GL_TEXTURE_MAG_FILTER, GL_LINEAR);
            seite.setTexParameteri(GL_TEXTURE_MIN_FILTER, GL_LINEAR);
            seite.setTexParameteri(GL_TEXTURE_WRAP_S, GL_CLAMP);
            seite.setTexParameteri(GL_TEXTURE_WRAP_T, GL_CLAMP);

Dies funktioniert bei bild1.jpg perfekt. Sie wird dann einfach auf einem GL_QUADS gebunden. Läuft...
Jetzt habe ich mir verschiedene andere Bilder/Texturen heruntergeladen und wollte diese ebenfalls so einbinden.
Ich habe die Größe entsprechend angepasst 2^n. Leider bekomme ich folgende Fehlermeldung :

Code:
Exception in thread "Thread-2" javax.media.opengl.GLException: java.lang.NullPointerException
        at javax.media.opengl.Threading.invokeOnOpenGLThread(Threading.java:271)
        at javax.media.opengl.GLCanvas.maybeDoSingleThreadedWorkaround(GLCanvas.java:410)
        at javax.media.opengl.GLCanvas.display(GLCanvas.java:244)
        at com.sun.opengl.util.Animator.display(Animator.java:144)
        at com.sun.opengl.util.Animator$MainLoop.run(Animator.java:181)
        at java.lang.Thread.run(Thread.java:595)
[b]Caused by: java.lang.NullPointerException[/b]
        at com.sun.opengl.util.texture.TextureIO.newTexture(TextureIO.java:523)
        at projekt.Projekt.init(Projekt.java:126)
        at com.sun.opengl.impl.GLDrawableHelper.init(GLDrawableHelper.java:72)
        at javax.media.opengl.GLCanvas$InitAction.run(GLCanvas.java:418)
        at com.sun.opengl.impl.GLDrawableHelper.invokeGL(GLDrawableHelper.java:189)
        at javax.media.opengl.GLCanvas$DisplayOnEventDispatchThreadAction.run(GLCanvas.java:452)
        at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:199)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:461)
        at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)

Ich hab es z.b. mit png versucht aber auch bei jpg kommt dieser Fehler.

Die Werte des bild1.jpg
512x512 pixel
72dpi
Bittiefe 24

Werte von bild2.jpg identisch bzw. auch mal mit 1024x1024 pixel
 

Marco13

Top Contributor
Schwer zu sagen. Wenn du sicher bist, dass das Bild da ist, kannst du ggf. nochmal versuchen, das Laden von Bild1 auszukommentieren, und nur Bild2 zu versuchen. Wenn das nicht funktioniert, liegt es am Bild - wenn es funktioniert (und das Problem DANN bei Bild3 aufrtritt) ist vielleicht der Zeitpunkt des Ladens falsch oder so ... er scheint da ja gerade in einem "display" zu sein - vielleicht kannst du die Bilder laden, bevor das erste mal was angezeigt wird oder so....? (Ist aber nur wild-wüst undfundiert geraten....)
 

JavaKing

Mitglied
Marco13 hat gesagt.:
Schwer zu sagen. Wenn du sicher bist, dass das Bild da ist, kannst du ggf. nochmal versuchen, das Laden von Bild1 auszukommentieren, und nur Bild2 zu versuchen. Wenn das nicht funktioniert, liegt es am Bild - wenn es funktioniert (und das Problem DANN bei Bild3 aufrtritt) ist vielleicht der Zeitpunkt des Ladens falsch oder so ... er scheint da ja gerade in einem "display" zu sein - vielleicht kannst du die Bilder laden, bevor das erste mal was angezeigt wird oder so....? (Ist aber nur wild-wüst undfundiert geraten....)

Also das Bild ist definitiv da, ist im gleichen Ordner wie alle anderen auch. Also ich habe mal alles auskommentiert und nur diese eine Routine geladen. Mit bild1 geht es mit bild2 nicht. Es ist zum Haare ausreißen !
bild2 ist nun sogar ein Bild das bei einem anderen opengl Projekt einwandfrei funktioniert hat !
 

JavaKing

Mitglied
Ich habe das Problem leider immernoch. :(
Weiß denn niemand eine Lösung ? evtl. eine andere Lade Routine ?
Bin für jeden Vorschlag dankbar.
 

Marco13

Top Contributor
Eine Testprogramm und die zwei Bilder, bei denen es einmal geht und einmal nicht, wäre wohl zu aufwändig? Naja, selbst wenn - mit einer Antwort wie "Bei mir geht's" oder "Bei mir geht's auch nicht" könntest du wohl eh nichts anfangen...
 

Fancy

Aktives Mitglied
Moin,

also das sollte so eigentlich gehen. TextureIO unterstützt unter anderem sowohl JPG als auch PNG. Texture verhält sich abhängig von den Bildparametern weitgehend intelligent. Die verwendeten Texturen müssen keine Auflösung von 2^n aufweisen.

Ich würde vermuten:
- Dein "bild2.jpg" ist nicht da wo Du denkst
- Dein JAVA sucht nicht da wo Du denkst
- Dein "bild2.jpg" ist fehlerhaft

Versuche mal ein:
Code:
System.out.println(getClass().getResource("/bild2.jpg");

Als Beispiel wie es bei mir geht:

Code:
package fancy.jf.texture;

import java.awt.Frame;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.IOException;
import java.nio.FloatBuffer;

import javax.media.opengl.GL;
import javax.media.opengl.GLAutoDrawable;
import javax.media.opengl.GLCanvas;
import javax.media.opengl.GLEventListener;
import javax.media.opengl.GLException;
import javax.media.opengl.glu.GLU;

import com.sun.opengl.util.Animator;
import com.sun.opengl.util.BufferUtil;
import com.sun.opengl.util.texture.Texture;
import com.sun.opengl.util.texture.TextureIO;

public class Tex implements GLEventListener {

    
    private static final float[] staticVertices = new float[] {
        1.0f,  1.0f, 
       -1.0f,  1.0f,  
       -1.0f, -1.0f, 
        1.0f,  1.0f,
       -1.0f, -1.0f, 
        1.0f, -1.0f};
    
    private static final float[] staticTexCord = new float[] {
        1.0f, 1.0f, 
        0.0f, 1.0f,  
        0.0f, 0.0f, 
        1.0f, 1.0f, 
        0.0f, 0.0f,   
        1.0f, 0.0f};


    private GL                   gl                  = null;
    private GLU                  glu                 = null;

    private FloatBuffer          vertexArrayVertices = null;
    private FloatBuffer          vertexArrayTexture  = null;

    private Texture[]            texture             = null;


    @Override
    public void init(GLAutoDrawable drawable) {

        gl = drawable.getGL();
        glu = new GLU();

        vertexArrayVertices = BufferUtil.newFloatBuffer(staticVertices.length);
        vertexArrayVertices.put(staticVertices, 0, staticVertices.length);
        vertexArrayVertices.rewind();

        vertexArrayTexture = BufferUtil.newFloatBuffer(staticTexCord.length);
        vertexArrayTexture.put(staticTexCord, 0, staticTexCord.length);
        vertexArrayTexture.rewind();

        texture = new Texture[2];

        try {

            for (int i = 0; i < texture.length; i++) {
                texture[i] = TextureIO.newTexture(getClass().getResource("/v" + i + ".jpg"), true, null);
                texture[i].setTexParameteri(GL.GL_TEXTURE_MAG_FILTER, GL.GL_LINEAR);
                texture[i].setTexParameteri(GL.GL_TEXTURE_MIN_FILTER, GL.GL_LINEAR);
                texture[i].setTexParameteri(GL.GL_TEXTURE_WRAP_S, GL.GL_CLAMP);
                texture[i].setTexParameteri(GL.GL_TEXTURE_WRAP_T, GL.GL_CLAMP);
            }

        } catch (GLException e) {
            e.printStackTrace();
            System.exit(1);
        } catch (IOException e) {
            e.printStackTrace();
            System.exit(1);
        }

        gl.glShadeModel(GL.GL_SMOOTH);
        gl.glClearColor(0.0f, 0.0f, 0.0f, 0.5f);
        gl.glClearDepth(1.0f);
        gl.glEnable(GL.GL_DEPTH_TEST);
        gl.glDepthFunc(GL.GL_LEQUAL);
        gl.glHint(GL.GL_PERSPECTIVE_CORRECTION_HINT, GL.GL_NICEST);

        gl.glEnableClientState(GL.GL_VERTEX_ARRAY);
        gl.glEnableClientState(GL.GL_TEXTURE_COORD_ARRAY);
        gl.glEnable(GL.GL_TEXTURE_2D);
    }


    @Override
    public void display(GLAutoDrawable drawable) {

        gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
        gl.glLoadIdentity();

        gl.glTranslatef(-1.0f, 0.0f, -12.0f);

        for (int i = 0; i < texture.length; i++) {
            texture[i].bind();
            gl.glVertexPointer(2, GL.GL_FLOAT, 0, vertexArrayVertices);
            gl.glTexCoordPointer(2, GL.GL_FLOAT, 0, vertexArrayTexture);
            gl.glDrawArrays(GL.GL_TRIANGLES, 0, staticVertices.length);

            gl.glTranslatef(2.0f, 0.0f, 0.0f);
        }

    }


    @Override
    public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) {

        if (height <= 0) height = 1;

        gl.glMatrixMode(GL.GL_PROJECTION);
        gl.glLoadIdentity();
        glu.gluPerspective(45.0f, (float) width / (float) height, 1.0, 20.0);
        gl.glMatrixMode(GL.GL_MODELVIEW);
        gl.glLoadIdentity();
    }


    @Override
    public void displayChanged(GLAutoDrawable drawable, boolean modeChanged, boolean deviceChanged) {}

    public static void main(String[] args) {

        final Frame frame = new Frame();
        final GLCanvas canvas = new GLCanvas();
        final Animator animator = new Animator(canvas);
        canvas.addGLEventListener(new Tex());
        frame.add(canvas);
        frame.setSize(500, 500);
        frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                new Thread(new Runnable() {
                    public void run() {
                        animator.stop();
                        System.exit(0);
                    }
                }).start();
            }
        });
        frame.setVisible(true);
        animator.start();
    }

}

Ansonsten, wie bereits von Marco vorgeschlagen, poste mal dein "bild2.jpg".

Gruß,
Michael
 

JavaKing

Mitglied
Das Thema hat mich jetzt echt zur Weißglut gebracht, tut es immer noch.
Ich denke aber ich habe eine Teil-Lösung gefunden. Es hat weder etwas mit dem Bild noch mit meiner Laderoutine zu tun.
Da ich leider auf 2 verschieden Entwicklungsversionen entwickeln muss, einmal Netbeans IDE 5.0 und IDE 6.1. Ist mir jetzt aufgefallen das bei IDE 6.1 alles reibungslos funktioniert. Ich kann die images in Unterverzeichnisse legen, sie können sogar gif sein oder verschiedenste Auflösungen haben. Es geht ! Aber auch erst als ich mein Projekt von meinem fast vollem (20-100MB noch frei) Speicherstick auf die Festplatte kopiert habe.

Jetzt als ich das Projekt wieder mit IDE 5.0 öffnen will compiliert er alles richtig, schmeißt mir aber beim öffnen wieder den gleichen Fehler. -> Null Pointer Exception.
Alles irgendwie sehr merkwürdig...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
O OpenGL - Texture falsch herum Spiele- und Multimedia-Programmierung 3
temi OpenGL: Eine Kugel Spiele- und Multimedia-Programmierung 7
P Audio Visualizer mit OpenGL in Java? Spiele- und Multimedia-Programmierung 4
Z Vlcj in OpenGL Spiele- und Multimedia-Programmierung 4
coolian opengl von scale in breite und höhe konvertieren Spiele- und Multimedia-Programmierung 23
F OpenGL (LWJGL) Shader Programmierung GLSL Spiele- und Multimedia-Programmierung 2
K Messdaten in Echtzeit darstellen in OpenGL Spiele- und Multimedia-Programmierung 4
J OpenGL Bild wird nicht richtig angezeigt Spiele- und Multimedia-Programmierung 2
B LWJGL OpenGL SIGSEGV auf Linux (Verzweiflung :/) Spiele- und Multimedia-Programmierung 8
KeexZDeveoper Fehler von OpenGL Spiele- und Multimedia-Programmierung 1
Kim_Dotcom libGDX - opengl Fehler Spiele- und Multimedia-Programmierung 5
Streeber Problem mit Transparenz/TextDrawing in LWJGL/Slick2d (OpenGL) Spiele- und Multimedia-Programmierung 1
RalleYTN OpenGL Context im JFrame? Spiele- und Multimedia-Programmierung 0
L OpenGL TransformationMatrix eines Flugzeugs Spiele- und Multimedia-Programmierung 2
F OpenGL - Transparenz mit Depth Peeling Spiele- und Multimedia-Programmierung 0
turing OpenGL / Jogle Code Reveiw zur Performance Verbesserung Spiele- und Multimedia-Programmierung 1
K LibGdx, Loadingscreen & Opengl context Spiele- und Multimedia-Programmierung 3
turing OpenGL VBO and Unfiform Handling Spiele- und Multimedia-Programmierung 1
B LWJGL / OPENGL Kriege Depth-Test nicht hin :( Spiele- und Multimedia-Programmierung 0
T opengl und Android.... Spiele- und Multimedia-Programmierung 3
D [OpenGL] Spiel in der Art von Age of Empires Spiele- und Multimedia-Programmierung 4
R LWJGL: OpenGL Fehler - weitere Informationen auslesen möglich? Spiele- und Multimedia-Programmierung 2
T Welche OpenGL-Version soll ich verwenden? Spiele- und Multimedia-Programmierung 2
Gregorrr OpenGL & RCP/SWT Spiele- und Multimedia-Programmierung 3
P LWJGL oder OpenGL (C++) Spiele- und Multimedia-Programmierung 7
K Android: OpenGL render performance Tipps ? Spiele- und Multimedia-Programmierung 4
lumo opengl, sprites/tiles Spiele- und Multimedia-Programmierung 8
M OpenGL: Rectangle dort erstellen wo ich hintippe Spiele- und Multimedia-Programmierung 2
U OpenGl 1.1 (LWJGL GL11.*) und weiter? Spiele- und Multimedia-Programmierung 7
CookieSoft OpenGl Translatef Frage Spiele- und Multimedia-Programmierung 2
V Keine Ahnung von OpenGL! Hilfe wäre lieb! Spiele- und Multimedia-Programmierung 8
T 3D Stadtmodell mit OpenGL Spiele- und Multimedia-Programmierung 5
TheWhiteShadow OpenGL glDrawArrays Bufferfehler Spiele- und Multimedia-Programmierung 10
B LWJGL/OpenGL rendert manche Objekte nicht Spiele- und Multimedia-Programmierung 6
S OpenGL Textur unsauber Spiele- und Multimedia-Programmierung 2
T OpenGL ES verschwindene Vertices Spiele- und Multimedia-Programmierung 2
T Android OpenGL Bewegen Spiele- und Multimedia-Programmierung 5
R OpenGL Textur mit verschiedenen bit depths Spiele- und Multimedia-Programmierung 6
Helgon OpenGL Blend Frage Spiele- und Multimedia-Programmierung 18
A LWJGL/OpenGL und Text Spiele- und Multimedia-Programmierung 8
Helgon OpenGL vernünftige Tutorial? Spiele- und Multimedia-Programmierung 22
A OpenGL Textur und nicht Textur Spiele- und Multimedia-Programmierung 2
T Jmonkey opengl problem Spiele- und Multimedia-Programmierung 13
T Probleme mit Skysphere in Opengl Spiele- und Multimedia-Programmierung 4
M Problem mit Kamera (glMultMatrix (OpenGL/ LWJGL)/ Quaternionen) Spiele- und Multimedia-Programmierung 5
F Suche Tutorial zu "purem" OpenGL mit Java Spiele- und Multimedia-Programmierung 10
Kr0e OpenGL + glSubTexImage2D -> Bufferproblem Spiele- und Multimedia-Programmierung 3
F OpenGL Screenshot in iMove (als Greenscreen) => Farben invertiert? Spiele- und Multimedia-Programmierung 16
I Vergleich von Java3D und OpenGL Spiele- und Multimedia-Programmierung 17
F Mac: OpenGL Desktop-Screen aus Grafikkarte lesen Spiele- und Multimedia-Programmierung 2
F OpenGL 2D MouseClick/MouseMove Listener Spiele- und Multimedia-Programmierung 4
Kr0e Sehr schnelle Texturupdates (OpenGL) Spiele- und Multimedia-Programmierung 3
Kr0e OpenGL beliebige Texturgröße Spiele- und Multimedia-Programmierung 2
BattleMaster246 OpenGL - Transparenz Spiele- und Multimedia-Programmierung 10
Kr0e OpenGL .. Pixel Buffer Objekt oder Frame Buffer Object? Spiele- und Multimedia-Programmierung 2
Y JOGL / OPENGL in Frame Spiele- und Multimedia-Programmierung 11
A Problem openGL-Pipeline mit Win7? Spiele- und Multimedia-Programmierung 6
G OpenGL boolesche operation auf Rechtecke Spiele- und Multimedia-Programmierung 15
A JOGL / OpenGL Spiele- und Multimedia-Programmierung 7
G API für 3d-Programmierung? OpenGL? Spiele- und Multimedia-Programmierung 12
J OpenGL (JOGL) - Radial Blur Effekt (Glow) Spiele- und Multimedia-Programmierung 2
J netbeans opengl keyPressed(KeyEvent evt) benutzen Spiele- und Multimedia-Programmierung 4
J netbeans opengl gluPerspective und gluLookAt Verständnis Spiele- und Multimedia-Programmierung 13
S glTexSubImage2D()-Fragen(Zerstörbares Terrain, OpenGL) Spiele- und Multimedia-Programmierung 3
Z Suche Tutorial zum Einstieg in OpenGl mit Java (JOGL) Spiele- und Multimedia-Programmierung 2
T Overlay in anderer OpenGL Anwendung Spiele- und Multimedia-Programmierung 4
egrath Vista OpenGL Performance Problem? Spiele- und Multimedia-Programmierung 3
Y OpenGL Spiele- und Multimedia-Programmierung 5
J opengl beispiele? Spiele- und Multimedia-Programmierung 10
D Java mit OpenGL - besser LWJGL oder JOGL? Spiele- und Multimedia-Programmierung 6
N OpenGL und DirectX - was genau ist das? Spiele- und Multimedia-Programmierung 5
C OpenGl Support für Applet (sun.java2d.opengl=True) Spiele- und Multimedia-Programmierung 3
B OpenGL oder Direct X Spiele- und Multimedia-Programmierung 9
Meeresgott LWJGL 3 Problem mit einer Texture Spiele- und Multimedia-Programmierung 4
TreCore Render Texture in libGDX Spiele- und Multimedia-Programmierung 5
X [LWJGL] Binden von Texturen per PNG File und Texture Sheet Spiele- und Multimedia-Programmierung 1
CookieSoft Slick und LWJGL Texture lag Spiele- und Multimedia-Programmierung 13
CookieSoft Slick Texture laden Fehler Spiele- und Multimedia-Programmierung 6
C Java3D Texture Mapping Spiele- und Multimedia-Programmierung 2
S Texture Koordinaten Spiele- und Multimedia-Programmierung 2
J Java3D: Texture-Frage Spiele- und Multimedia-Programmierung 4
Hatsi09 Libvlc laden Spiele- und Multimedia-Programmierung 0
E TMX - Dateien in Java laden Spiele- und Multimedia-Programmierung 1
R Fehler beim Laden eines 2D-Bildes Spiele- und Multimedia-Programmierung 3
D JAVA Basiertes Spiel aus dem Internet in eigenem Client laden Spiele- und Multimedia-Programmierung 1
D [JOGL] bibliothek aus jar laden Spiele- und Multimedia-Programmierung 3
D Minecraft Config in andere Class laden/Minecraft Plugin Spiele- und Multimedia-Programmierung 1
R LWJGL: Object Loader -> .obj, .c4d, ... laden Spiele- und Multimedia-Programmierung 3
J Images laden in static Methode Spiele- und Multimedia-Programmierung 8
J Java3D - Textur laden geht nicht Spiele- und Multimedia-Programmierung 9
A Welche chunks im vorraus laden? Spiele- und Multimedia-Programmierung 9
A Speichern un Laden mit Serializable Spiele- und Multimedia-Programmierung 4
S Sounds abspielen, ohne sie jedesmal neu zu laden Spiele- und Multimedia-Programmierung 8
Gossi Probleme beim Laden der Images aus dem "Tutorial für Java-Spiele" Spiele- und Multimedia-Programmierung 4
D JOGL2 eigene mipmaps laden Spiele- und Multimedia-Programmierung 13
P .obj-Datei in Java3D laden: ParsingErrorException Spiele- und Multimedia-Programmierung 7
aze Problem beim Laden von Obj File Spiele- und Multimedia-Programmierung 3
N Jogl Probleme mit dem Buffer beim laden einer Textur Spiele- und Multimedia-Programmierung 2
B Teile eines Bildes laden - BitBlk und drawImage Spiele- und Multimedia-Programmierung 3
S Problem beim laden eines Bildes in einer Methode Spiele- und Multimedia-Programmierung 14

Ähnliche Java Themen

Neue Themen


Oben