Applet编程技巧

2016-02-19 13:26 0 1 收藏

下面图老师小编跟大家分享Applet编程技巧,一起来学习下过程究竟如何进行吧!喜欢就赶紧收藏起来哦~

【 tulaoshi.com - 编程语言 】


  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所 示。
  示例程序如下:
  import java.awt.*;
  public class Ball extends MultiThreadApplet {
   Image ball=null;
   Image applet=null;
   Graphics appletG,ballG;
   public void run() {
   if(ball==null) {
   applet=createlmage(bounds().width, bounds().
   height);
   ball=create Image(70,70);
   appletG=applet.getGraphics();
   ballG=ball.getGraphics();
   ballG.setColor(Color.gray);
   ballG.drawOral(0,0,70,70); }
   for(int x=0;x400;x++) {
   double angle=((double)x)/20;
   int y=(int)(Math.abs(Math.sin(angle))*80);
   appletG.clearRect(0,0,bounds().width.bounds(),
   helght);
   drawBackground(appletG);
   appletG.drawImage(ball,x.80y,this);
   this.getGraphics().drawImage(applet,0,0,this);
   try {
   Thread.sleep(25);
   } catch(Exception ignored) { } }
   }
   private void drawBackground(Graphics g){
   for (int i=0;i1;i++){
   g.drawLine(0.i* 10, 400,i*10); }
   }
   }
  小程序首先用createImage()取得与小程序大小完全相同的屏外 图形缓存,赋给变量app let,然后得到缓存的绘图对象appletG。以后 对帧的刷新操作过程都是针对appletG。这包括清除帧、绘制背景、 在新位置绘制图形。最后再用drawImage()方法把缓存复制到小程序 的屏幕显示区。运行这个小程序,你会发现动画非常平滑,不存在闪烁 现象。
  除了闪烁之外,假如动画过于复杂,帧速率就可能降低。若动画降 到每秒20帧,则动画会出现间断现象影响显示效果。因此有必要优化 动画速度,下面列出了一些可行的方案;①画得尽可能少;②用较快的 绘图算法;③用颜色循环等技巧来绘画某一部分;④用图案来表示细节 ;⑤用定点整数进行三维计算;⑥用查询的预先计算结果来处理复杂算 法。
  
  
  4.缩短小程序装入时间 
  
  真正功能性的小程序本身并不小,这就意味着小程序从Internet 上下载需要花很多时间。随着小程序的普及,越来越多的Internet频 带被用于从各地的服务器向客户端Web浏览器传送这些小程序,因此响 应时间进一步下降。为了缩短小程序下载和装入时间,可以采取以下3 种方法。
  ?使执行文件尽量小尽管Internet (TCP协议)可以接受任意长度 的数据流,但负责点对点传送的网络设备(例如:路由器)对一次传送分 组包的上限有严格的限制,通常这一限制是2 56的整数倍。因此,当小 程序在网上传送时,按照上限它被分成若干包,而最后一个包可能只有 几个字节。这些包是单独传送,需要在客户端重新组装为原先小程序 执行文件字节流。当最后一个包延迟时,可能要用好几秒来等待最后 几个字节到达。唯一的解决办法就是保持类文件尽量小。开发人员可 以在不影响程序逻辑主体的前提下尝试下列方案:①删除查错代码;② 缩小String直接量;③选择Java编译器优化编译选项;④删除用不到的 方法等。
  ?类散保持在可控范围内几乎没有一个小程序是由一个类组成。 通常,开发人员为了实现一个功能较强的小程序需要从标准的Java基 类中派生出若干子类,并对之进行组合。因此,若要使一个小程序运行 ,Java虚拟机就要分别下载并装入这些类。假如实现中类的数目较多, 下载的时间也就相应较长。我们都知道,下载20个独立的数据块比下 载一个相当于20个数据块之和的大数据块要花费更多的时间,这是由 于下载每个独立数据块都要重新进行网络联接,而进行每次联接都要 花费时间的缘故。因此,开发人员在设计小程序时,类的数目要选择适 中,即可保证结构层次清楚,又要保证程序精简,不增加冗余。
  ?缩短小程序初始化时间用户讨厌等待,因此,程序下载后应尽量 缩短初始化时间。假如预处理工作较多,可以用辅助线程先同用户进 行交互,例如:问候用户、询问用户姓名、显示进程指示等。总之,让 用户"忙起来"。同时,小程序主线程可以继续在后台做初始化工作。 有句话请记住:"兴奋时时间过得快",充分利用这一现象可以改变用户 对小程序装入时间的感觉。
  使用Java开发WWW客户端应用程序十分方便,技术也很多,本文只 简单介绍几种方法和注重事项供大家参考。 

来源:https://www.tulaoshi.com/n/20160219/1604276.html

延伸阅读
Application和Applet是利用JAVA语言生成的可运行代码中最常用的两种,两者都必须在JAVA虚拟机上运行。简单来讲,Application更象我们平常用VB,VC等编写的桌面程序,多以控制台(CONSOLE)方式运行,当然也很容易实现窗口应用.Applet可以嵌入Web页面中,在支持JAVA虚拟机的浏览器上运行。在使用时应该区应用。
下面代码中用到的sourceImage是一个已经存在的Image对象 图像剪切 对于一个已经存在的Image对象,要得到它的一个局部图像,可以使用下面的步骤: //import Java.awt.*; //import java.awt.image.*; Image croppedImage; ImageFilter cropFilter; CropFilter =new CropImageFilter(25,30...
Visual Basic(以下简称VB)是Windows下的一个面向对象的可视 化开发环境,功能非常强大。下面笔者就自己在实际软件开发过程中 获得的一些经验和大家作以交流。 提示钮的实现 如果自己留心一点儿,一定注意到了Microsoft公司的一系列产品 (如Word、Excel甚至B 本身),都为其应用程序的命令按钮提供了信息 。如用户不清楚软件中所列图...
C++语言是一个面向对象的语言,使用C++编写的代码更加简捷、高效,更具可维护性和可重用性。但是很多人使用了C++语言后却感到C++与C编程没有什么区别。这其实是由于对C++语言的特点和特色理解和使用不够造成的。事实上,没有任何一个程序员使用C语言的编程效率可以超过C++语言的。 一、使用new和delete进行动态内存分配和释放 ...
Java的AWT库允许你把用户界面建立在Java applet中。AWT库包含有所有的用于建立简单界面所需要的控制:按钮、编辑框、检查框等等。 import java.awt.*; import java.applet.*; public class AppletEvent extends Applet { int x, y ; Button b ; Color clr ; 在该applet构造函数中,代码初始化了变量x,y,clr,建立了一个新的...

经验教程

423

收藏

75
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部