使用GLEventListener.display()绘制顶点时出现NullPointerException

时间:2014-04-03 22:48:03

标签: java opengl jogl

当我运行app时,会立即抛出空指针异常,不知道为什么?
如果我将Rectangle.draw()代码移动到Renderer.display(),则应用运行正常。

继承错误:

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)

渲染器在Main.java中实例化 glcanvas.addGLEventListener(new Renderer());

GLEventListener实现:

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();
    }
}

1 个答案:

答案 0 :(得分:1)

因为在您的构造函数中,您实际上并未将new Rectangle()分配到rectangle字段。

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

因此,当您的render方法被调用且其中的rectangle.draw(gLDrawable);将不再抛出NPE时,因为矩形将被实例化并分配。