java动画闪烁_优化Java动画编程中的显示效果
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动画编程中的显示效果相关推荐
- java程序效率_优化JAVA程序的执行效率和性能
StringBuffer或者StringBuilder(线程不安全)来拼接或者操作 字符串就比直接使用String效率高. 避免在循环条件中使用复杂表达式 在不做编译优化的情况下,在循环中,循环条件会 ...
- 优化Java动画编程中的显示效果
优化Java动画编程中的显示效果 作者:赵福军 曹代勇 李青云 发文时间:2002.11.12 09:32:33 Java动画编程有多种实现方法,但它们实现的基本原理是一样的,即在屏幕上画出一系列的帧 ...
- java内存屏障_内存屏障 | 并发编程网 – ifeve.com
本文我将和大家讨论并发编程中最基础的一项技术:内存屏障或内存栅栏,也就是让一个CPU处理单元中的内存状态对其它处理单元可见的一项技术. CPU使用了很多优化技术来实现一个目标:CPU执行单元的速度要远 ...
- java 堆大小的最大值_优化Java堆大小的5个技巧
优化Java堆大小的5个技巧 摘要:Java堆容量不足可以对性能造成很大影响,这样无疑就给程序带来不可必要的麻烦,本文总结了影响Java堆容量不足的五大原因以及巧妙地去优化? 本文作者Pierre是一 ...
- java进度条_自学java你需要知道的,适合编程小白
1. java学习网站 之前在很多学习网站上学习过Java,踩过很多坑,今天给大家推荐一个比较好用的Java学习网站,希望大家能少踩坑 Java教程 | 项目实践一站式java学习 这个网站的针对性强 ...
- java 并发集合_《Java 7并发编程实战手册》第六章并发集合
由人民邮电出版社出版的<Java 7并发编程实战手册>终于出版了,译者是俞黎敏和申绍勇,该书将于近期上架.之前并发编程网组织翻译过此书,由于邮电出版社在并发网联系他们之前就找到了译者,所以 ...
- java finally方法_讲解Java编程中finally语句的使用方法
讲解Java编程中finally语句的使用方法 在java中的finally关键一般与try一起使用,在程序进入try块之后,无论程序是因为异常而中止或其它方式返回终止的,finally块的内容一定会 ...
- java武功秘籍_请问java全套内容都有什么呢?
我整理的Java全套内容学习路线,分为6个阶段(大阶段)第一阶段:java内功心法篇 第二阶段:Java武功秘籍(经典框架) 第三阶段:Java高级功法(主流框架) 第四阶段:Java成神之路 第五阶 ...
- java基础知识点_「Java面试题/知识点精华集」20000+字的Java基础知识篇(2020最新版) !
" 本文已经收录进我的 79K Star 的 Java 开源项目 JavaGuide:https://github.com/Snailclimb/JavaGuide (「Java学习+面试指 ...
最新文章
- 多传感器融合:自动驾驶(下)
- linux课程设计死锁避免,linux操作系统课程设计—车辆死锁.doc
- mysql 存储过程声明式游标_Mysql 存储过程中使用游标循环读取临时表
- a good way for improving my reading ability
- Python Django后台管理模板美化:使用django-simpleui模块
- 推荐一个AutoCad查看器——Free DWG Viewer试用
- mysql查看执行计划_MySql中如何使用 explain 查询 SQL 的执行计划
- linux 命令全集
- C语言汉字写入问题及Unicode优势
- Leetcode每日一题:13.roman-to-integer(罗马数字转整数)
- Redis高并发5-redis数据持久化之企业应用
- jdk线程的同步问题
- 【基础】杨辉三角python题解
- Android 扫一扫功能 二维码 条形码
- 右键打开git bash 找不到应用程序
- 删除wmspdmv监控进程-- 背后的眼睛
- Odoo与浪潮合资研发PS Cloud之在Odoo发送和接收电子邮件
- ThreadLocal实战之数据库执行器线程同步
- getCause()、e.getMessage()产生的结果
- JavaScript基础(详细总结)
热门文章
- 玩转iOS开发:NSURLSession讲解(三)
- 使用Notepad++开发C#,一个复杂点的csscript脚本
- c++单链表【构造函数、运算符重载、析构函数、增删查改等】
- Java 编程:如何提高性能?(简单总结篇)
- BZOJ 3170: [Tjoi 2013]松鼠聚会 切比雪夫距离
- 视频专辑:Servlet视频教程
- MFC控件(7):Split Button
- J2SE综合对java util的总结 一
- 思科CCIE认证知识点之IPv6地址
- java class 关键字_java关键字及其作用