Pergunta

When I run the app a null pointer exception is throw straight away, not sure why?
If i move the Rectangle.draw() code into Renderer.display(), the app runs fine.

Heres the error:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at com.app.code.Renderer.render(Renderer.java:111)
    at com.app.code.Renderer.display(Renderer.java:87)

Renderer is instanciated in Main.java
glcanvas.addGLEventListener(new Renderer());

GLEventListener implementation:

class Renderer implements GLEventListener {

    private GLU glu = new GLU();
    private Rectangle rectangle;

    public Renderer(){
        new Rectangle();
    }

    public void display(GLAutoDrawable gLDrawable) {
        render(gLDrawable);
    }

    private void render(GLAutoDrawable gLDrawable) {
        GL2 gl = gLDrawable.getGL().getGL2();
        gl.glClear(GL2.GL_COLOR_BUFFER_BIT | GL2.GL_DEPTH_BUFFER_BIT);
        gl.glLoadIdentity();

        rectangle.draw(gLDrawable);
    }

Rectangle.java

public class Rectangle {

    public Rectangle(){
    }

    void draw(GLAutoDrawable gLDrawable){
        gLDrawable.getGL().getGL2().glTranslatef(-1.5f, 0.0f, -6.0f);
        gLDrawable.getGL().getGL2().glBegin(GL2.GL_QUADS);              
        gLDrawable.getGL().getGL2().glVertex3f(-1.0f, -1.0f, 0.0f); 
        gLDrawable.getGL().getGL2().glVertex3f(-1.0f, 1.0f, 0.0f);  
        gLDrawable.getGL().getGL2().glVertex3f(1.0f, 1.0f, 0.0f);   
        gLDrawable.getGL().getGL2().glVertex3f(1.0f, -1.0f, 0.0f);  
        gLDrawable.getGL().getGL2().glEnd();                
        gLDrawable.getGL().getGL2().glFlush();
    }
}
Foi útil?

Solução

Because in your constructor you're not actually assigning the new Rectangle() to your rectangle field.

public Renderer()
{
    rectangle = new Rectangle();
}

So when your render method is called and rectangle.draw(gLDrawable); within it will no longer throw a NPE as rectangle will have been instantiated and assigned.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top