【发布时间】:2014-10-09 21:09:48
【问题描述】:
我正在尝试使用缓冲区,我尝试用绿色填充缓冲区,然后立即将其显示在屏幕上,但屏幕不会在没有循环的情况下显示绿色。谁能给我解释一下?
public void draw() {
createBufferStrategy(2);
Graphics g = image.createGraphics();
BufferStrategy bs = getBufferStrategy();
for (int i = 0; i < 16; i++) {
System.out.println(i);
if (!a) {
g.setColor(Color.green);
g.fillRect(0, 0, w, h);
}
a = true;
Graphics bsg = bs.getDrawGraphics();
// bsg.drawImage(image, 0, 0, h, w, null);
// g.clearRect(0, 0, w, h);
// g.drawOval(0, 0, 50, 50);
bsg.setColor(Color.green);
bsg.fillRect(0, 0, getWidth(), getHeight());
bsg.dispose();
bs.show();
}
}
我还发现,如果我将循环设置为小于 16 次或取消它,图像将不会显示
这是一个完整的可运行代码
public class BufferTest extends Canvas implements Runnable {
int h = 400;
int w = 400;
BufferedImage image;
boolean a;
public static void main(String[] a) {
JFrame frame = new JFrame();
BufferTest test = new BufferTest();
frame.add(test);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
test.draw();
Thread t = new Thread(test);
// t.start();
}
public BufferTest() {
this.setPreferredSize(new Dimension(w, h));
image = new BufferedImage(h, w, BufferedImage.TYPE_INT_RGB);
}
public void draw() {
createBufferStrategy(2);
// Graphics g = image.createGraphics();
BufferStrategy bs = getBufferStrategy();
for (int i = 0; i < 16; i++) {
System.out.println(i);
//if (!a) {
//g.setColor(Color.green);
//g.fillRect(0, 0, w, h);
//}
//a = true;
Graphics bsg = bs.getDrawGraphics();
//bsg.drawImage(image, 0, 0, h, w, null);
//g.clearRect(0, 0, w, h);
//g.drawOval(0, 0, 50, 50);
bsg.setColor(Color.green);
bsg.fillRect(0, 0, getWidth(), getHeight());
bsg.dispose();
bs.show();
}
}
@Override
public void run() {
while (true) {
draw();// TODO Auto-generated method stub
}
}
}
【问题讨论】:
-
你想达到什么目的?
-
当我注意到这个问题时,我只是在练习。你能解释一下发生了什么吗?
标签: java image canvas buffer render