java 双缓冲技术解决屏幕闪烁问题
程序员文章站
2022-07-05 12:30:14
...
在线程run()方法中调用repaint()方法来对界面重绘,就达到动画的效果。当运行程序的时候发现,屏幕闪的厉害。查看程序,发现线程run()中while()循环每循环一次界面就要重绘一次,这才导致屏幕频繁的闪烁。。
深入分析,这个repaint()方法是从父类JFrame继承来的,当repaint方法执行的时候会调用update(Graphics g)方法,而update()方法里面首先判断是否轻量组件,如果是那么用背景色覆盖掉界面g.clearRect(0,0,width,height),然后再调用paint()方法,意思就是先清理掉当前,然后画下一个画面,所谓屏幕闪烁就是清理和重绘的过程,那么如何解决呢,貌似要达到动画的效果就必须先清理再重绘。。。咋办呢
屏幕闪动总是那么的让人无法忍受,于是我上网搜了一下解决方法,乍看下去都是说的用双缓冲技术来解决。。小弟为了让屏幕冷静下来不要那么激动就自学了一下,下面我来说说我的理解。。
所谓双缓冲,就是在内存中重新开辟新空间,作为后台图像,然后把本来要在界面上进行的清理和重绘在后台处理好,生成一幅新的画面,最后再显示在界面上。
原理总是很简单的,实现起来时怎样呢?
首先要定义两个私有变量,一个是后台图像iBuffer,一个是后台图像的画布对象gBuffer。这也就是所谓的双缓冲。然后通过一段程序来帮助理解:
将本来要在界面上实现的操作(画面的清理和重绘)在后台就实现好,然后绘制成一幅画面,最后在界面上显示这个画面,从而消除屏幕的闪烁,问题也随之解决。