2013-08-28 83 views
0

出於某種原因,當我嘗試創建tripple緩衝區時出現錯誤,這是我第一次使用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

基本上,你想之前顯示組件(連接到屏幕)創建緩衝策略。這是Thread'和EDT之間的競爭條件 – MadProgrammer

回答

0

基本上,你想之前顯示組件(連接到屏幕)創建緩衝策略。這是您與Thread之間的競爭狀態

您可以檢查isDisplayed您的run方法並等待它爲true

你也可以開始你的線程後,您所做的框架可見......

相關問題