Java动画编程有多种实现方法,但它们实现的基本原理是一样的,即在屏幕上画出一系列的帧来造成运动的感觉。Java多线程技术是Java动画编程中普遍运用的技术,它在控制动画程序的流程和动画的显示效果方面起着重要的作用。Java动画编程中的动画闪烁和图像残缺不全等现象,是Java程序员经常遇到的问题。本文以作者应用实例程序为基础,阐述如何运用多线程、重载Update、双缓冲和图像跟踪等技巧来解决这类问题,以达到动画显示的最佳效果。

Java多线程技术

Java多线程技术简介

目前,线程(Thread)已经为许多操作系统和应用开发系统所采用。线程是程序的单个控制流,具有顺序程序的特点。但是,线程不是一个程序,它仅仅是程序的一个执行序列。线程具有很强的并发功能,在同一时刻可以有多个线程同时处于执行状态。线程是动态的,具有一定的生命周期,分别经历从创建、执行、阻塞、直到消亡的过程。Java语言对多线程编程的支持有两种实现方法:一种是直接继承Thread类,另一种是实现Runnable接口。Thread类提供了对线程的控制方法,如start(),stop(),run()、suspend()、resume()和sleep()等方法,它们可以对线程的状态进行控制。

动画线程的设计与实现

为了每秒中多次更新屏幕,必须创建一个线程来实现动画的循环,这个循环要跟踪当前帧并响应周期性的屏幕更新要求。许多Java初学者容易犯的一个错误是将动画循环放在paint()中,这样占据了主AWT线程,而主线程将负责所有的绘图和事件处理。因此,应该生成一个独立的动画线程来完成图像的显示和更新。例如,在一个Applet框架下,当Applet启动(Start)时,生成一个动画线程;在Applet停止(stop)时,终止该动画线程以释放它所占用的CPU资源。下列程序代码(简称“C1”代码)是该动画线程的具体实现:

public void start() {

if(animatorThread==null) {

animatorThread=new Thread(this);

//开始动画线程

animatorThread.start();

}

}

public void stop(){

//停止动画线程

animatorThread=null;

}

上面终止动画线程的时候,并不是调用该动画线程的stop()方法,而是设置该动画线程为null。因为如果直接调用线程的stop()方法会强制线程终止所有的执行工作,有时会带来不好的结果。设置该动画线程为null,则在run()方法中,由于不满足循环条件,线程会自然退出。这样,也进一步优化了该动画程序。

重载update()和双缓冲技术消除闪烁

在Java中,动画发生闪烁有两个原因:一

java动画闪烁_优化Java动画编程中的显示效果相关推荐

  1. java程序效率_优化JAVA程序的执行效率和性能

    StringBuffer或者StringBuilder(线程不安全)来拼接或者操作 字符串就比直接使用String效率高. 避免在循环条件中使用复杂表达式 在不做编译优化的情况下,在循环中,循环条件会 ...

  2. 优化Java动画编程中的显示效果

    优化Java动画编程中的显示效果 作者:赵福军 曹代勇 李青云 发文时间:2002.11.12 09:32:33 Java动画编程有多种实现方法,但它们实现的基本原理是一样的,即在屏幕上画出一系列的帧 ...

  3. java内存屏障_内存屏障 | 并发编程网 – ifeve.com

    本文我将和大家讨论并发编程中最基础的一项技术:内存屏障或内存栅栏,也就是让一个CPU处理单元中的内存状态对其它处理单元可见的一项技术. CPU使用了很多优化技术来实现一个目标:CPU执行单元的速度要远 ...

  4. java 堆大小的最大值_优化Java堆大小的5个技巧

    优化Java堆大小的5个技巧 摘要:Java堆容量不足可以对性能造成很大影响,这样无疑就给程序带来不可必要的麻烦,本文总结了影响Java堆容量不足的五大原因以及巧妙地去优化? 本文作者Pierre是一 ...

  5. java进度条_自学java你需要知道的,适合编程小白

    1. java学习网站 之前在很多学习网站上学习过Java,踩过很多坑,今天给大家推荐一个比较好用的Java学习网站,希望大家能少踩坑 Java教程 | 项目实践一站式java学习 这个网站的针对性强 ...

  6. java 并发集合_《Java 7并发编程实战手册》第六章并发集合

    由人民邮电出版社出版的<Java 7并发编程实战手册>终于出版了,译者是俞黎敏和申绍勇,该书将于近期上架.之前并发编程网组织翻译过此书,由于邮电出版社在并发网联系他们之前就找到了译者,所以 ...

  7. java finally方法_讲解Java编程中finally语句的使用方法

    讲解Java编程中finally语句的使用方法 在java中的finally关键一般与try一起使用,在程序进入try块之后,无论程序是因为异常而中止或其它方式返回终止的,finally块的内容一定会 ...

  8. java武功秘籍_请问java全套内容都有什么呢?

    我整理的Java全套内容学习路线,分为6个阶段(大阶段)第一阶段:java内功心法篇 第二阶段:Java武功秘籍(经典框架) 第三阶段:Java高级功法(主流框架) 第四阶段:Java成神之路 第五阶 ...

  9. java基础知识点_「Java面试题/知识点精华集」20000+字的Java基础知识篇(2020最新版) !

    " 本文已经收录进我的 79K Star 的 Java 开源项目 JavaGuide:https://github.com/Snailclimb/JavaGuide (「Java学习+面试指 ...

最新文章

  1. 多传感器融合:自动驾驶(下)
  2. linux课程设计死锁避免,linux操作系统课程设计—车辆死锁.doc
  3. mysql 存储过程声明式游标_Mysql 存储过程中使用游标循环读取临时表
  4. a good way for improving my reading ability
  5. Python Django后台管理模板美化:使用django-simpleui模块
  6. 推荐一个AutoCad查看器——Free DWG Viewer试用
  7. mysql查看执行计划_MySql中如何使用 explain 查询 SQL 的执行计划
  8. linux 命令全集
  9. C语言汉字写入问题及Unicode优势
  10. Leetcode每日一题:13.roman-to-integer(罗马数字转整数)
  11. Redis高并发5-redis数据持久化之企业应用
  12. jdk线程的同步问题
  13. 【基础】杨辉三角python题解
  14. Android 扫一扫功能 二维码 条形码
  15. 右键打开git bash 找不到应用程序
  16. 删除wmspdmv监控进程-- 背后的眼睛
  17. Odoo与浪潮合资研发PS Cloud之在Odoo发送和接收电子邮件
  18. ThreadLocal实战之数据库执行器线程同步
  19. getCause()、e.getMessage()产生的结果
  20. JavaScript基础(详细总结)

热门文章

  1. 玩转iOS开发:NSURLSession讲解(三)
  2. 使用Notepad++开发C#,一个复杂点的csscript脚本
  3. c++单链表【构造函数、运算符重载、析构函数、增删查改等】
  4. Java 编程:如何提高性能?(简单总结篇)
  5. BZOJ 3170: [Tjoi 2013]松鼠聚会 切比雪夫距离
  6. 视频专辑:Servlet视频教程
  7. MFC控件(7):Split Button
  8. J2SE综合对java util的总结 一
  9. 思科CCIE认证知识点之IPv6地址
  10. java class 关键字_java关键字及其作用