源代码如下:
public class TankClient extends Frame{

Image offScreenImage=null;
MyTank mytank = new MyTank(50,50,this);CopyOnWriteArrayList<Missile> missiles = new CopyOnWriteArrayList<Missile>();@Override
public void paint(Graphics g) {mytank.paint(g);for(Missile m:missiles) {if(null!=m && !m.isOut) {m.paint(g);}else {missiles.remove(m);}}}@Override
public void update(Graphics g) {if(null==offScreenImage) {offScreenImage =this.createImage(Constant.FRAME_WIDHT, Constant.FRAME_HEIGHT);}Graphics goff = offScreenImage.getGraphics();paint(goff);g.drawImage(offScreenImage, 0, 0, null);
}

原因是自己重写的update方法没有进行擦除,查阅java.awt.Container的update方法代码如下:
public void update(Graphics g) {
if (isShowing()) {
if (! (peer instanceof LightweightPeer)) {
g.clearRect(0, 0, width, height);
}
paint(g);
}
}
当组件为重量级组件时清除,为轻量级组件是不清除,由于Frame 是重量级组件,不重写update方法,repaint会调用update方法,进行清除,不会出现重影,但自己写的没有清楚,加入clearRect方法即可。
@Override
public void update(Graphics g) {
if(null==offScreenImage) {
offScreenImage =this.createImage(Constant.FRAME_WIDHT, Constant.FRAME_HEIGHT);
}
Graphics goff = offScreenImage.getGraphics();
//加入清除
goff.clearRect(0, 0, Constant.FRAME_WIDHT, Constant.FRAME_HEIGHT);

 paint(goff);g.drawImage(offScreenImage, 0, 0, null);
}

java 使用双缓冲出现重影问题,图片残留相关推荐

  1. java swing双缓冲_java中的双缓冲技术

    毕业设计有个远程协助功能,得到对方的屏幕后,老是会闪,很是不爽,今天用java的双缓冲技术解决了.代码如下,本类重写了Swing中的JLabel,当Label重绘时,会默认的调用它的update方法, ...

  2. JAVA多线程双缓冲笔记_关于多线程学习的笔记

    task: implement Observer and Observable, read shared_ptr base 库 1. base/StringPiece.h Viewpoint 1. 判 ...

  3. java图片双缓存_Java 双缓冲技术消除图片闪动

    一般在使用Canvas组件刷新显示图片或者绘图的时候,会产生闪烁.这是由于机制是先使用背景色对原有内容进行覆盖,再往上面绘制新内容所引起的.我们看到的闪烁就是背景色和新内容之间的交替显示. 下面为Ca ...

  4. Java Swing 经典小游戏《飞机大战》———— (一)获取素材,创建窗口,添加滚动背景,双缓冲

    (一)最终效果 1.窗口 2.项目框架 (二)效果实现 1.获取素材 获取步骤省略,大家可自行到我的资源获取,放置在src目录下 2. 创建窗口 WinGame.java import java.aw ...

  5. java闪烁_java双缓冲解决屏幕闪烁

    今天做实验,发现了屏幕闪烁问题,网上找到解决方法,在此谢谢原作者 转自http://blog.sina.com.cn/s/blog_611ca6300100ezfx.html Java的强大特性让其在 ...

  6. Delphi 使用双缓冲解决图片切换时的闪烁问题 good

    Delphi 使用双缓冲解决图片切换时的闪烁问题 good 参考文章: (1)Delphi 使用双缓冲解决图片切换时的闪烁问题 good (2)https://www.cnblogs.com/find ...

  7. java 坦克重叠_【Java】我所知道坦克大战(单机版)之画出坦克的实心圆、让圆动起来、双缓冲解决闪烁问题...

    28640发布于 今天 02:47 本篇文章目的 画出坦克的实心圆 让坦克圆动起来 双缓冲解决闪烁问题 一.画出代表坦克的实心圆 我们需要画出一个圆,那么可以使用fillOval方法 fillOval ...

  8. java双缓冲绘图_Java双缓冲技术-绘图应用

    1屏幕产生闪烁的原因 由于在显示所绘制的图像时,调用了repaint方法.repaint方法被调用时,需要清除整个背景,然后才调用paint方法显示画面.这样,在清除背景和绘制图像的短暂时间间隔内被用 ...

  9. java串口设备中断_利用DMA双缓冲或半完成中断实现串口不定长数据的接收

    在<HAL版本DMA循环模式串口数据收发>中介绍了利用DMA循环模式进行串口数据的收发,STM32F4xx的DMA还提供了双缓冲的功能,采用双缓冲模式,可以在一个DMA完成接收后,对其缓冲 ...

最新文章

  1. GitHub免费支持CI/CD了,开发测试部署高度自动化,支持各种语言,网友:第三方凉凉...
  2. 详解 Spring 3.0 基于 Annotation 的依赖注入实现--转载
  3. 数据库连接字符串.udl
  4. CORS 跨域-哪些操作受到同源限制
  5. ubuntu下安装zabbix
  6. SpringBoot @ConfigurationProperties详解
  7. java中true转换为int_在Java中将字节转换为int的最优雅的方式
  8. 周鸿祎:做产品体验先把自己切换到二傻子模式
  9. 西门子step7安装注册表删除_如何完全卸载step7
  10. CADD课程学习(10)-- 模拟不同体系与小分子相互作用(MOE)
  11. Python开发微信公众号
  12. C++的引用一,求二次方根
  13. 汽车维修企业管理【7】
  14. 双非本科生进大厂,而我还在底层默默地爬树(上)
  15. Axure RP8 进度条
  16. D3.js用动画渲染数据集的显示
  17. QPainter 画扇形
  18. Java-MQTT客户端监控连接状态事件
  19. 《考试脑科学》阅读笔记
  20. 老调重弹:JDBC系列 之 驱动加载原理全面解析

热门文章

  1. jieba读取txt文档并进行分词、词频统计,输出词云图
  2. vis---network网状拓扑图展示
  3. SLBrowser.exe 未指定的错误
  4. OpenH323 Gatekeeper - The GNU Gatekeeper 使用手册
  5. 这届年轻人为何这么穷, 90后都在啃老买房吗?
  6. wamp 安装php更高版本,wamp怎么升级php版本
  7. 实习生找java web工作时经常碰到培训班怎么破?
  8. 2015 国际程序员节
  9. win7怎么调屏幕自动休眠时间
  10. 9.3 国际化处理标签