我喜欢用双缓冲创建一个小图形库,以避免闪烁。
所以我在Canvas
上创建了一个双缓冲策略。我假设我strategy.getDrawGraphics()
返回当前的后台缓冲区(绘图缓冲区)。比我在缓冲区上画一些东西。现在我假设strategy.show()
使用前缓冲区翻转后缓冲区,以便后台缓冲区显示在屏幕上。但是当我运行以下代码时,我没有看到黑色矩形:
final JFrame frame = new JFrame();
frame.setSize(800, 600);
frame.setVisible(true);
final Canvas canvas = new Canvas();
frame.add(canvas);
// Double Buffering
canvas.createBufferStrategy(2);
final BufferStrategy strategy = canvas.getBufferStrategy();
Graphics2D current = (Graphics2D) strategy.getDrawGraphics();
current.setColor(Color.BLACK);
current.fillRect(0, 0, 800, 600);
strategy.show(); // flip back buffer with front buffer?
current.dispose();
Toolkit.getDefaultToolkit().sync();
Thread.sleep(1000);
frame.dispose();
答案 0 :(得分:2)
三件事......
Canvas
添加JFrame
)Thread.sleep
,长时间运行的循环或调用阻塞方法(例如I / O)。这可能会阻止您的应用程序被绘制(除其他外)。相反,你应该考虑使用类似javax.swing.Timer
的东西,它将在后台线程中睡眠,但会在事件调度线程的上下文中触发看看......
了解更多详情