5

これはコードです:

import java.awt.*;
import java.applet.*;

public class anim1 extends Applet{

    public void paint (Graphics g)
    {
        g.drawString("",400,300);
    }

    public static void main(String ad[])
    {
        anim1 a=new anim1();
        Graphics g1;
        a.paint(g1);
    }
}

g1 が初期化されていないことを示しています。しかし、抽象クラスを初期化するにはどうすればよいでしょうか?

4

7 に答える 7

15

さて、ここには2つの問題があります1:

    Graphics g1;
    a.paint(g1);

G1 が初期化されていないというエラーが表示されます。これは、変数 g1 が何も設定されておらず、コンパイル エラーが発生するためです。コードをコンパイルするには、少なくとも次のようにする必要があります。

    Graphics g1 = null;
    a.paint(g1);

ただし、それは明らかにあまり役に立ちません。コードを実行しようとすると、NullPointerException が発生します。実際にグラフィックを描画するには、次のことが必要です。

    anim1 a=new anim1();
    Graphics g1 = anim1.getGraphics();
    a.paint(g1);

ただし、Anim1 が画面に表示されないため、それでも機能しません。画面に表示するには、次のようなものが必要です。

import java.awt.*;
import javax.swing.*;
import java.applet.*;

public class So1 extends Applet{

    public void paint (Graphics g)
    {
        g.drawString("hello",40,30);
    }

    public static void main(String ad[])
    {

        JFrame jp1 = new JFrame();
        So1 a=new So1 ();
        jp1.getContentPane().add(a, BorderLayout.CENTER);
        jp1.setSize(new Dimension(500,500));
        jp1.setVisible(true);

    }
}

ここで注意してください、私たちは実際には paint() 関数を自分で呼び出していません。これは awt によって処理されます。awt は実際にグラフィックス コンテキストを選択し、ペイント関数を呼び出します。ただし、必要に応じて、任意のグラフィックス オブジェクトを渡して、それに描画するように要求することができます。(したがって、コンポーネントを画像に描画したい場合は、それを行うことができます)

(注、クラス名を anim1 から So1 に変更しました)

于 2009-12-27T11:21:38.243 に答える
1

次のように main メソッドを削除するだけです。

import java.awt.*;
import java.applet.*;

public class anim1 extends Applet {

    public void paint (Graphics g) {
        g.drawString("Hello",100,100);
    }
}
于 2012-09-27T00:54:42.243 に答える
1

アプレットには、通常の Java アプリケーションのような main メソッドは必要ありません。Sun の Applets Tutorialから始めることをお勧めします。特に、グラフィック オブジェクトがアプレット内でどのように処理されるかを確認するには、アプレットのライフ サイクルのセクションにスキップしてください。

于 2009-12-27T06:38:14.973 に答える
0

paint(Graphics g) を呼び出す代わりに、repaint または update メソッドを呼び出す必要があります。ただし、このためには、クラスが java.awt.Container の階層に属している必要があります。

あなたのクラスでは Paint メソッドをオーバーライドしており、メインでは paint メソッドを呼び出そうとしています。ペイントの代わりに、repaint または update メソッドを呼び出す必要があり (クラスが java.awt.Container の階層にある場合)、Java のイベント ディスパッチ システムがオーバーライドされたペイント メソッド自体を呼び出します。

于 2009-12-27T06:38:38.060 に答える
0

Graphics オブジェクトを初期化しないでください。

Component#getGraphics()メソッドを介してコンポーネントからグラフィックス オブジェクトを取得します。

あなたの特定のケースでは、必要なのはそれだけだと思いrepaint()ます!!

于 2009-12-27T06:41:22.110 に答える
0

ペイント メソッド内でコンポーネントのグラフィックスを操作し、repaint() または update() を呼び出す必要がありますが、ペイント メソッドを直接呼び出す必要はありません。

詳細については、ここから始めてください。

于 2009-12-27T06:28:38.317 に答える