2013-08-28 4 views
0

어떤 이유에서든, 내가 트립플 버퍼를 만들려고 할 때 오류가 발생합니다. 이것은 BufferStratrgy 클래스를 처음 사용하는 것이므로, 하고있어. 처음으로 BufferStrategy 클래스를 사용하면 무언가가 작동하지 않습니다.

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) 
+0

를 스레드를 시작할 수 있습니다. 이것은'스레드'와 EDT 사이의 경쟁 조건입니다 – MadProgrammer

답변

0

, 당신은 구성 요소 (화면에 연결)이 표시되기 전에 버퍼 전략을 수립하기 위해 노력하고 있습니다. 이것은 스레드와 EDT 사이의 경쟁 조건입니다

run 방법에서 isDisplayed을 확인하고 true까지 기다릴 수 있습니다. 당신이 프레임이 가시화 한 후에

또한 기본적으로,이 구성 요소가 (화면에 연결)이 표시되기 전에 버퍼 전략을 만들려고 ...

관련 문제