1

キャンバスで bufferstrategy を使用することを学んでいます。このクラスをコーディングし、別のクラスの JFrame に追加しました。長方形を描こうとしていますが、キャンバスが空です。コンソールは言う

at java.awt.Component$FlipBufferStrategy.createBuffers(Unknown Source)
at java.awt.Component$FlipBufferStrategy.<init>(Unknown Source)
at java.awt.Component$FlipSubRegionBufferStrategy.<init>(Unknown Source)
at java.awt.Component.createBufferStrategy(Unknown Source)
at java.awt.Canvas.createBufferStrategy(Unknown Source)
at java.awt.Component.createBufferStrategy(Unknown Source)
at java.awt.Canvas.createBufferStrategy(Unknown Source)
at myPanel.draw(Pannello.java:72)
at myPanel.run(Pannello.java:59)
at java.lang.Thread.run(Unknown Source)

そして、これがコードです。私はそれをデバッグし、私が作成したすべてのメソッドに入ります。基本的に、なぜ長方形が表示されないのかわかりません。

public class myPanel extends Canvas implements Runnable {

    //FIELDS
    private static final long serialVersionUID = 1L;
    public static int WIDTH = 1024;
    public static int HEIGHT = WIDTH / 16 * 9;
    private boolean running;
    private Thread t1;





    public synchronized void start (){
        running = true;
        t1 = new Thread (this);
        t1.start(); // calls run()

        }


    //INIT
    public myPanel(){

        setPreferredSize(new Dimension(WIDTH, HEIGHT));
        setFocusable(true);
        requestFocus();
    }


    //Main runnable

    public void run(){
        while (running){   
           update();
           draw();
        }
    }


    public void update(){

    }


    public void draw(){
       BufferStrategy bs = getBufferStrategy();
       if (bs== null){
       createBufferStrategy(3);
       }

       Graphics g = bs.getDrawGraphics();
       g.setColor(Color.BLACK);
       g.fillOval(0, 0, 20, 20);
       g.dispose();
       bs.show();
    }

}

4

2 に答える 2

0

あなたの場合、フレーム初期化子では:

public myPanel() {...}

メソッド「frame.addNotify()」を呼び出す必要があります。例:

public myPanel() {
    Dimension size = new Dimension(WIDTH, HEIGHT);
    setPreferredSize(size);
    frame = new JFrame();
    frame.addNotify();
}

その後、コードを下に、次のコードを含めます。

@Override
public void addNotify() {
    super.addNotify();
}

これは、このクラスでバッファを使用することをフレームに通知するだけです。フレームが要求されたタスクに使用するコンポーネントのバッファを知らなかったときに、バッファを使用してグラフィックタイプのバッファ戦略を作成するようにフレームを取得しようとしていました。

于 2015-01-06T15:29:31.913 に答える