1

何らかの理由で、トリプル バッファを作成しようとするとエラーが発生します。これは BufferStratgy クラスを使用するのが初めてなので、自分が何をしているのか必ずしもわかりません。

package com.valgriz.main;

 import java.awt.Canvas;
 import java.awt.Color;
 import java.awt.Graphics;
 import java.awt.image.BufferStrategy;

 import javax.swing.JFrame;
 import javax.swing.JPanel;

 public class Main extends Canvas implements Runnable {
public static JFrame frame = new JFrame();
public Thread thread = new Thread(this);
private final int SCALE = 4;

public static void main(String[] args) {
    frame.add(new Main());
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(360, 480);
    frame.setTitle("8ddddd");
    frame.setLocationRelativeTo(null);
    frame.setResizable(false);
    frame.setVisible(true);
}

public Main() {
    thread.start();
}

public void update() {

}

public void render() {
    BufferStrategy bs = getBufferStrategy();
    if (bs == null) {
        createBufferStrategy(3);
        return;
    }
    Graphics g = bs.getDrawGraphics();
    g.setColor(Color.black);
    g.fillRect(0, 0, getWidth(), getHeight());
    g.dispose();
    bs.show();
}

public void run() {
    while (true) {
        update();
        render();
    }
}
 }

これは私が得るエラーです:

Exception in thread "Thread-1" java.lang.IllegalStateException: Component must have a valid peer
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 com.valgriz.main.Main.render(Main.java:37)
at com.valgriz.main.Main.run(Main.java:50)
at java.lang.Thread.run(Unknown Source)
4

1 に答える 1

0

基本的に、コンポーネントが表示される (画面に接続される) 前に、バッファリングされた戦略を作成しようとしています。これはスレッドと EDT の間の競合状態です

isDisplayedあなたの方法をチェックして、runそれがなるまで待つことができますtrue

フレームを表示した後にスレッドを開始することもできます...

于 2013-08-28T02:28:01.727 に答える