@Nifontov

Почему возникает ошибка Exception in thread «Thread-2» java.lang.IllegalStateException: Component must have a valid peer?

Добрый день, уважаемые пользователи, не так давно начал изучать язык java.
Попытался добавить стратегию мультибуферизации, но компилятор не хочет запускать...

===== Ниже представлен Код======
import javax.swing.JFrame;

public class TetrisMain extends Canvas implements Runnable, KeyListener {

public static final int WIDTH=400, HEIGHT=540;

public static void main(String[] args){
JFrame frame = new JFrame("Тетрис");
frame.setSize(WIDTH, HEIGHT);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setResizable(false);
TetrisMain tm = new TetrisMain();
frame.setVisible(true);
tm.start();
}

public void start(){
Thread t = new Thread(this);
t.setPriority(Thread.MAX_PRIORITY);
t.start();

}
public void run() {
boolean running = true;
while(running){
update();
BufferStrategy buf = getBufferStrategy();
if(buf == null){
createBufferStrategy(3);
continue;
}
Graphics2D g = (Graphics2D) buf.getDrawGraphics();
render(g);
buf.show();
}
}

public void update() {
}

public void render(Graphics2D g){
g.setColor(Color.BLACK);
g.fillRect(0, 0,WIDTH, HEIGHT);

}
public void keyPressed(KeyEvent e){

}
public void keyTyped(KeyEvent e){
}

public void keyReleased(KeyEvent e){
}
}
==========================================
И Вот собственно ошибки которые выдает компилятор
===========================================

Exception in thread "Thread-2" java.lang.IllegalStateException: Component must have a valid peer
at java.awt.Component$FlipBufferStrategy.createBuffers(Unknown Source)
at java.awt.Component$FlipBufferStrategy.(Unknown Source)
at java.awt.Component$FlipSubRegionBufferStrategy.(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 Tetr.TetrisMain.run(TetrisMain.java:41)
at java.lang.Thread.run(Unknown Source)

Помогите пожалуйста
  • Вопрос задан
  • 5840 просмотров
Пригласить эксперта
Ответы на вопрос 1
Почитайте исходники, чтоли
The peer implements the component's behavior. The peer is set when the Component is added to a container that also is a peer.


Очевидно, что вы попытались выполнить операцию до того, как выполнены эти условия. Связано это, помимо прочего, с тем, что вы пытаетесь выполнить эту операцию в другом потоке, что недопустимо в AWT, если не оговорено иное. Почитайте про event dispatch thread.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы