-1
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

4

2 に答える 2

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);
}
于 2013-02-11T04:47:06.850 に答える
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);        
    }
}
于 2013-02-11T05:12:20.737 に答える