当我运行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();
}
}
答案 0 :(得分:1)
因为在您的构造函数中,您实际上并未将new Rectangle()
分配到rectangle
字段。
public Renderer()
{
rectangle = new Rectangle();
}
因此,当您的render
方法被调用且其中的rectangle.draw(gLDrawable);
将不再抛出NPE
时,因为矩形将被实例化并分配。