java 双缓冲技术解决屏幕闪烁问题

在线程run()方法中调用repaint()方法来对界面重绘,就达到动画的效果。当运行程序的时候发现,屏幕闪的厉害。查看程序,发现线程run()中while()循环每循环一次界面就要重绘一次,这才导致屏幕频繁的闪烁。。

 

       深入分析,这个repaint()方法是从父类JFrame继承来的,当repaint方法执行的时候会调用update(Graphics g)方法,而update()方法里面首先判断是否轻量组件,如果是那么用背景色覆盖掉界面g.clearRect(0,0,width,height),然后再调用paint()方法,意思就是先清理掉当前,然后画下一个画面,所谓屏幕闪烁就是清理和重绘的过程,那么如何解决呢,貌似要达到动画的效果就必须先清理再重绘。。。咋办呢

 

       屏幕闪动总是那么的让人无法忍受,于是我上网搜了一下解决方法,乍看下去都是说的用双缓冲技术来解决。。小弟为了让屏幕冷静下来不要那么激动就自学了一下,下面我来说说我的理解。。

       所谓双缓冲,就是在内存中重新开辟新空间,作为后台图像,然后把本来要在界面上进行的清理和重绘在后台处理好,生成一幅新的画面,最后再显示在界面上。

       原理总是很简单的,实现起来时怎样呢?

 

       首先要定义两个私有变量,一个是后台图像iBuffer,一个是后台图像的画布对象gBuffer。这也就是所谓的双缓冲。然后通过一段程序来帮助理解:

public void update(Graphics g)  
  {  
         if(offScreenImage == null)  
            offScreenImage = this.createImage(500, 500);     //新建一个图像缓存空间,这里图像大小为800*600  
            Graphics gImage = offScreenImage.getGraphics();  //把它的画笔拿过来,给gImage保存着  
            paint(gImage);                                   //将要画的东西画到图像缓存空间去  
            g.drawImage(offScreenImage, 0, 0, null);         //然后一次性显示出来  
  }  


      将本来要在界面上实现的操作(画面的清理和重绘)在后台就实现好,然后绘制成一幅画面,最后在界面上显示这个画面,从而消除屏幕的闪烁,问题也随之解决。

 

 

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值