调用g返回Null异常?

时间:2013-02-11 04:43:13

标签: java applet awt

public class delaunay extends Applet implements Runnable {
    public Graphics g;
    public void paint( Graphics g ) {
        displaytri(po[eee],arr[0].p1,arr[0].p2);
    }
    public void displaytri(Point v1, Point v2, Point v3) { 
    g.drawLine(v1.x,v1.y,v2.x,v2.y);
    g.drawLine(v2.x,v2.y,v3.x,v3.y);
    g.drawLine(v3.x,v3.y,v1.x,v1.y);        
}
}
当我尝试使用po[eee],arr[0].p1时,

System.out.println()和所有其他点都可以正常工作。每个变量v1 v2 v3都有自己的值,我尝试在函数displaytri中打印这些值。

这导致错误:

  
    

线程“AWT-EventQueue-1”中的异常java.lang.NullPointerException

  

2 个答案:

答案 0 :(得分:2)

您尚未初始化实例/类变量g

尝试使用g方法的paint变量将其初始化为类变量g,如下所示:

public Graphics g;
public void paint( Graphics g ) {

   this.g = g;
   displaytri(po[eee],arr[0].p1,arr[0].p2);
}

答案 1 :(得分:2)

您永远不应该维护对系统创建的任何Graphics对象的引用。

这可能会使你超出油漆管道并导致意外的油漆瑕疵。

相反,将g的引用传递给您需要的方法....

public class delaunay extends Applet implements Runnable {

    public void paint( Graphics g ) {
        displaytri(g, po[eee],arr[0].p1,arr[0].p2);
    }
    public void displaytri(Graphics g, Point v1, Point v2, Point v3) { 
        g.drawLine(v1.x,v1.y,v2.x,v2.y);
        g.drawLine(v2.x,v2.y,v3.x,v3.y);
        g.drawLine(v3.x,v3.y,v1.x,v1.y);        
    }
}