1.Java Applet概述
Java程序分为两类:Java小程序(Applet)和Java应用程序(Applic ation),这两类程序是有区别的。Java Applet嵌入在WWW的页面,作为 页面的组成部分被下载,并能运行在实现Java虚机器(JVM)的Web浏览 器中。Java的安全机制可以防止小程序存取本地文件或其他安全方面 的问题。而一个Java应用程序运行于Web浏览器之外,没有Applet运行 时的诸多限制。另外,两者程序设计上的最大区别在于:Java Applet 没有主程序,而Java应用程序一定要有主程序。 在Java中每个applet都是由Applet的子类来实现。开发人员自定 义的applet通过重载A pplet的几个主要成员函数完成小应用程序的 初始化、绘制和运行。这些函数是init()、pa int()、start()、sto p()和destory()。 一个applet的生命周期与Web页面有关。当首次加载含applet的 页面时,浏览器调用ini t()方法,完成applet的初始化。然后调用pai nt()或start()方法绘制或启动程序。当用户离开页面时,浏览器调用 stop()方法停止小程序运行。若用户关闭浏览器将使applet停止运行 ,浏览器调用destory()方法终止,使小应用程序有机会释放其存在期 间锁定的资源。只要用户不关闭浏览器,重新加载页面,浏览器则只调 用start()方法和paint()方法重新绘制并运行小程序。
2.扩展小程序基类支持多线程
通常情况下,设计小程序是为了给主页增加交互性,使页面更加生 动活泼。因此,那些真正有用小程序,如动画、实时更新Internet服务 器信息回取、一般娱乐等通常都是持续运行的,即小程序的逻辑主体 存在着无限循环。这个逻辑主体不宜放在几个浏览器调用方法中,如i nit()、paint()、start()等。这是因为隐含情况下,小程序所有主逻 辑都采用单一线程。当浏览器调用方法中出现死循环,则程序控制不 返回。如果用户换到另一个页面之后小程序还在运行,就会浪费处理 器资源。你可以做一个实验,使用小程序查阅器运行小程序,你会发现 查阅器本身完全停止作用,因为它要等到调用函数返回后,才能继续处 理其他事情(如响应菜单)。显然,这个逻辑主体必须放在其他地方。 解决方法是在小程序框架中加入线程,把逻辑主体放在线程run()方法 中。只在浏览器调用方法start()中生成线程,而在stop()中终止线程 运行,这样当用户不查阅时不会占用处理器资源。图2表示浏览器、小 程序和线程之间的关系。 由于浏览器/小程序/线程是所有浏览器都采用的模型,而Java.ap plet.Applet类本身并不支持线程。在实际使用中,为方便操作,我们 可以派生Applet类生成一个支持线程的子类, 今后再编写applet时, 就可以直接从子类中派生,程序逻辑主体放在run()方法中,将线程控 制隐藏起来。这个子类如下: import Java.applet.*; import Java.awt.*; class MultiThreadApplet extends Applet implements Runnab le { Thread thisThread; public void start() { if (thisThread==null) { thisThread=new Thread (this); thisThread.start(); } } public void stop() { if (thisThread!=null) { thisThread.stop(); thisThread=null; } } public void run() { } } 由于run()是接口Runnable的抽象方法,所以在MultiThreadApple t类中也需要进行定义,只不过内容为空。下面的例子显示如何使用这 个类。程序包含一个无限循环累加操作,并将结果显示在屏幕上: import java.awt.*; public class counter extends MultiThreadApplet{ int Counter; public void run(){ while(true) { counter++; repaint(); } } public void paint(Graphics g){ g.drawString(string.valueof(counter), 10, 10); } } 很显然,这个小程序对线程的操作已被隐藏在MultiThreadApplet 中。
3.解决动画中的一些问题
动画的本质就是运动的图形,一系列连续显示的静止图形会给我 们一种连续动画的假象。只要动画速度足够快,则分散的静止图形就 会合并成一个连续运动的流程。 绘制动画十分简单,只需遵照以下三步即可:①擦去整个小程序绘 图区;②重画动画背景;③在新的位置绘制图形。但是,当动画连续帧 之间运动和颜色不连续时就会发生闪烁现象( 例子略)。问题出在小 程序区的屏幕刷新上,有两种方法可以防止动画闪烁。第一种方法是 只做局部刷新,即每次只擦除改变的部分。例如:如果要绘制一幅"飞 行的星空"动画,每次刷新操作,先擦去前一位置的星星,再在新的位置 绘制一个。但是,如果动画比较复杂,运动部分重叠较多,则局部刷新 操作很繁琐也影响程序运行速度。在这种情况下,可以用另外一种方 法( 双缓存)来解决闪烁问题。它的核心思想是在屏幕外完成一帧的 全部动画,然后把最后绘制完的帧显示在小程序屏幕上。过程如图3所 示
(编辑:aniston)
|