三:Java之Applet

首先我要说的是Applet是一种应用程序,它是一种由JAVA编写的小应用程序,通常这种应用程序都像他的名字一样,是一个很小的程序,也许有些朋友就会问了,那么它是用来干什么的呢?JAVA程序就是JAVA程序啊,为什么要弄出个小应用程序?

一、Applet初识

Applet编程是JAVA编程语言至关重要的独特功能,它不同与一般的JAVA程序的地方是,它能够嵌入在HTML网页中,并由支持JAVA的WEB浏览器来动态下载解释执行,当然我们所使用的IE浏览器3.0以上的版本是支持JAVA小应用程序的,有了这种小应用程序,我们的网页就能有一定的交互功能。

在Java Applet中,可以实现图形绘制,字体和颜色控制,动画和声音的插入,人机交互及网络交流等功能。 Applet还提供了名为抽象窗口工具箱(Abstract Window Toolkit, AWT)的窗口环境开发工具。 AWT利用用户计算机的GUI元素,可以建立标准的图形用户界面,如窗口、按钮、滚动条等等。目前,在网络上有非常多的Applet范例来生动地展现这些功能,读者可以去调阅相应的网页以观看它们的效果。

Applet的工作原理

含有Applet的网页的HTML文件代码中部带有<applet> 和</applet>这样一对标记,当支持Java的网络浏览器遇到这对标记时,就将下载相应的小应用程序代码并在本地计算机上执行该Applet。

Applet的下载与图形文件一样需要一定的时间,若干秒后它才能在屏幕上显示出来。等待的时间则取决于Applet的大小和用户的网络连接的速度。一旦下载以后,它便和本地计算机上的程序以相同的速度运行了。

Applet在用户的计算机上执行时,还可以下载其它的资源,如声音文件、图像文件或更多的Java代码,有些Applet还允许用户进行交互式操作。但这需要重复的链接与下载,因此速度很慢,这是一个亟待解决的问题,可以想到的一个好办法是采用类似高速缓存的技术,将每次下载的文件都临时保存在用户的硬盘上,虽然第一次使用时花的时间比较多,但当再次使用时,只需直接从硬盘上读取文件而无需再与Internet连接,便可以大大提高性能了。

二、Applet和application

在JAVA语言中,能够独立运行的程序称为Java应用程序(Application)。Java语言还有另外一种程序——Application 程序。

JavaApplet和JavaApplication在结构方面的主要区别表现在:

(1)运行方式不同。Java Applet程序不能单独运行,它必须依附于一个用HTML语言编写的网页并嵌入其中,通过与Java兼容的浏览器来控制执行。Java Application是完整的程序,可以独立运行,只要有支持Java的虚拟机,它就可以独立运行而不需要其他文件的支持。

(2)运行工具不同。运行Java Applet程序的解释器不是独立的软件,而是嵌在浏览器中作为浏览器软件的一部分。Java Application程序被编译以后,用普通的Java解释器就可以使其边解释边执行,而Java Applet必须通过网络浏览器或者Applet观察器才能执行。

(3)程序结构不同。每个Java Application程序必定含有一个并且只有一个main方法,程序执行时,首先寻找main方法,并以此为入口点开始运行。含有main方法的那个类,常被称为主类,也就是说,Java Application程序都含有一个主类。而Applet程序则没有含main方法的主类,这也正是Applet程序不能独立运行的原因。尽管Applet没有含main方法的主类,但Applet一定有一个从 java.applet.Applet派生的类,它是由Java系统提供的。

(4)Java Applet程序可以直接利用浏览器或AppletViewer提供的图形用户界面,而Java Application程序则必须另外书写专用代码来营建自己的图形界面。

(5)受到的限制不同Java Application程序可以设计成能进行各种操作的程序,包括读/写文件的操作,但是 Java Applet 对站点的磁盘文件既不能进行读操作,也不能进行写 操作。然而,由于 Applet的引入,使Web页面具有动态多媒体效果和可交互性能,这使由名为超文本、实为纯文本的HTML语言编写成的Web页面真正具有了超文本功能,不但可以显示文本信息,而且还可以有各种图片效果和动态图形效果,从而使页面显得生动美丽;另外,Applet使Web页面增加了按钮等功能,从而增加了交互性。

JavaApplet和JavaApplication在执行方面的主要区别表现在:Java Application一般是在本地机上运行,而Java Applet一般放在服务器上,它是根据本地机的请求被下载到本地机,然后才在本地机上运行。

三、基本框架

Applet的基本框架是由一套方法组成的,它们提供了浏览器与Applet之间的接口以及二者执行控制的基本机制;方主要法如下:

1、init():

创建Applet时执行,该方法只被执行一次;

当Applet程序第一次被支持Java的浏览器加载时,便执行该方法;在Applet程序的生命周期中,该方法只被执行一次,因此可以在其中进行一些只执行一次的初始化操作,如:处理由浏览器传递进来的参数、添加用户接口组件、加载图像和声音文件等;Applet程序有默认的构造方法,但它习惯于在init()方法中执行所有的初始化,而不是在默认的构造方法内;

2、start():

该方法多次执行,当浏览器从图标恢复成窗口,或者是返回该主页时执行;

系统在调用完init()方法之后,将自动调用此方法;而且每当浏览器从图标恢复为窗口时,或者用户离开包含该Applet程序的主页后又再返回时,系统都会再执行一遍start()方法;因此,该方法在Applet程序的生命周期中被调用多次,以启动Applet程序的执行,这一点与init()方法不同;该方法是Applet程序的主体,在其中可以执行一些需要重复执行的任务或者重新激活一个线程,例如:开始动画或播放声音等;

3、stop():

该方法被多次执行,当浏览器变成图标时,或者是离开主页时执行,主要功能是停止一些耗用系统资源的工作;

与start()相反,当用户离开Applet程序所在页面或浏览器变成图标时,会自动调用此方法;因此,该方法在Applet的生命周期中也被多次调用;这样使得可以在用户并不注意Applet程序的时候,停止一些耗用系统资源的工作(如中断一个线程),以免影响系统的运行速度,且并不需要去人为地去调用该方法;如果你的Applet程序中不包含动画、声音等程序,通常也不必重载该方法;

4、destroy():

该方法用来释放资源,在stop()之后执行;

浏览器正常关闭时,Java自动调用这个方法;该方法方法用于回收任何一个与系统无关的内存资源;当然,如果这个Applet程序仍然处于活动状态,那么Java会在调用该方法之前,先自动调用stop()方法;

5、其它方法:

paint(Graphicsg):该方法用于具体的界面绘制;

update():该方法用于具体的界面刷新;

repaint():该方法用于具体的界面重绘;

四、样例程序

1、Applet代码:

<span style="font-size:18px;">importjava.io.*;
importjava.awt.*;
importjava.lang.*;
importjava.applet.*;
publicclass MyApplet extends Applet
{
  private String strUserName;
  private String strPassword;
  private int   iCount;
  private int   iPosX;
  public void init()
  {
    strUserName =this.getParameter("username");
    strPassword =this.getParameter("password");
    iCount     = Integer.parseInt(this.getParameter("count"));
    iPosX      = 25;
  }
  public void paint(Graphics g)
  {
    g.drawRect(10, 10, iWidth, iHeigh);
    g.drawString("UserName: " +strUserName + " Count:" + iCount, iPosX, 60);
    g.drawString("Password: " +strPassword, iPosX, 80);
  }
}</span>

2、HTML代码:

<span style="font-size:18px;"><html>
  <head>
    <metahttp-equiv="Content-Type" content="text/html;charset=GB2312">
    <metahttp-equiv="Content-Language" Content="zh-CN">
    <title>JSP APPLET TEST</title>
  </head>
  <body>
    <Applet id="MyApplet"name="MyApplet" code="MyApplet.class"codebase="." height="300" width="300">
      <param name="username"value="sankhya">
      <param name="password"value="bdxnote">
      <param name="count"value="30">
    </Applet>
  </body>
</html></span>

五、Applet相关问题

1.  Applet是什么

Applet又称为Java小应用程序,是能够嵌入到一个HTML页面中,并且可通过Web浏览器下载和执行的一种Java类。  Applet不需要main()方法,由Web浏览器中内嵌的Java虚拟机调用执行。

2.  Applet的安全限制

因为applet是从远端服务器上下载并且在本地执行,所以安全性就显得格外重要。通过限制applet在沙箱(applet的运行环境)中运行,保证了对本地系统而言applet是安全的。

applet在沙箱中运行时:

⑴    不能运行任何本地可执行程序;

⑵    除了存放下载的applet的服务器外,applet不能和其它主机进行通信。

⑶不能对本地文件系统进行读写。

3.  Applet的生命周期

init():当浏览器加载applet,进行初始化的时候调用该方法。

start():在init()方法之后调用。当用户从其它页面转到包含applet的页面时,该方法也被调用。

stop():在用户离开包含applet的页面时被调用。

destroy():当applet不再被使用,或浏览器退出的时候,该方法被调用。

4.  paint()方法这个paint还是来自于AWT

Applet本质上是图形方式的,我们应该在图形环境中绘制我们的显示内容。

我们可以通过创建一个paint()方法在Applet的panel上绘图。只要Applet的显示需要刷新,paint()方法就会被浏览器环境调用。例如,当Applet的显示尺寸发生变化的时候,或浏览器窗口被最小化或被要求以图标方式显示时,这种调用就会发生。

我们应该编写自己的paint()方法,以使它在任何时候被调用,都能正常地工作。对它的调用是异步产生的,且由Applet的运行环境而不是程序来驱动。

paint()方法带有一个参数,它是java.awt.Graphics类的一个实例。这个参数总是建立该Applet的panel的图形上下文,我们可以用这个图形上下文在Applet中绘图或写入文本。

5.  applet从网页中获取信息

正如应用程序可以通过命令行参数来获取信息一样,通过使用param标记,applet可以从网页中获取信息。

在浏览器中显示信息:调用AppletContext接口中的showStatus()方法

请求浏览器显示指定的网页:调用AppletContext接口中的showDocument()方法。

6.  applet的HTML标记和属性

n  用于定位的applet属性

⑴    width和height:必要的属性,以象素为单位,设定applet的宽度和高度。

⑵        align:可选的属性,指定applet对齐的方式。

left:       把applet放在网页左边,后面的文本会移至applet的右边。

right:      把applet放在网页右边,后面的文本会移至applet的左边。

bottom:     把applet的底部与当前行文本底部对齐。

top:        把applet的顶部与当前行顶部对齐。

texttop:    把applet的顶部与当前行文本顶部对齐。

middle:     把applet的中部与当前行基线对齐。

absmiddle:  把applet的中部与当前行中部对齐。

baseline:   把applet的底部与当前行基线对齐。

absbottom:  把applet的底部与当前行底部对齐。

⑶vspace和hspace:可选的属性,指定在applet上/下的象素数目(vspace)和applet两边的象素数目(hspace)。

用于编码的applet属性

⑴    code:指定applet类文件的名字。该名字要么是相对于codebase,那么是相对于当前页面。

⑵        codebase:可选的属性,告诉浏览器到哪个目录下去寻找类文件。

⑶ archive:可选的属性,列出Java存档文件、包含类文件的文件或者applet需要的其它资源。

(4)object:用来指定applet类文件的另外一个方法。

⑸name:可选的属性,页面脚本编写人员希望赋予applet名字属性,这样,在编写脚本的时候,就可以用为该属性指定的名字来代表这个applet。

附录:AWT动画,还是讨论paint(),update(),repaint()之间的关系

更新显示由一种被称为AWT线程的独立的线程来完成。这个线程可用来处理与显示更新相关的两种情况。

第一种情况是显露(exposure),它在首次显示时,或在部分显示已被破坏而必须刷新时出现。显示的破坏可能发生在任何时刻,因此,我们的程序必须能在任意时刻更新显示。

第二种情况是在程序重画带有新内容的画面时。这种重画可能会要求首先擦除原来的图像。

paint(Graphicsg)方法

当组件第一次显示,或受损的部分需要修复时被调用。除非必要,更新不会完全覆盖整个图形区域,而是严格限制在被破坏的范围内。

repaint()方法

对repaint()的调用可通知系统:你想改变显示,于是系统将调用paint()。

update(Graphicsg)方法

repaint()实际上产生了一个调用另一方法update()的AWT线程。update方法通常清除当前的显示并调用paint()。update()方法可以被修改,例如:为了减少闪烁可不清除显示而直接调用paint()。

三:Java之Applet

时间: 2024-10-12 21:04:42

三:Java之Applet的相关文章

JAVA 虚拟机深入研究(三)——Java内存区域

JAVA 虚拟机深入研究(一)--关于Java的一些历史 JAVA 虚拟机深入研究(二)--JVM虚拟机发展以及一些Java的新东西 JAVA 虚拟机深入研究(三)--Java内存区域 Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的围城,城外的人想进去,城里的人想出来. Java运行的时候会把内存分为若干个,他们各有各的用途,每块区域的创建和销毁都是相对独立的,有的跟虚拟机一起混,有的则抱着用户的大腿同生共死. 按照第七版的<Java虚拟机规范>规定,JVM所管理的内存包括以下

多线程(三) java中线程的简单使用

============================================= 原文链接:多线程(三) java中线程的简单使用 转载请注明出处! ============================================= java中,启动线程通常是通过Thread或其子类通过调用start()方法启动. 常见使用线程有两种:实现Runnable接口和继承Thread.而继承Thread亦或使用TimerTask其底层依旧是实现了Runnabel接口.考虑到java的

Apache Kafka系列(三) Java API使用

Apache Kafka系列(一) 起步 Apache Kafka系列(二) 命令行工具(CLI) Apache Kafka系列(三) Java API使用 摘要: Apache Kafka Java Client API 一.基本概念 Kafka集成了Producer/Consumer连接Broker的客户端工具,但是在消息处理方面,这两者主要用于服务端(Broker)的简单操作,如: 1.创建Topic 2.罗列出已存在的Topic 3.对已有Topic的Produce/Consume测试

Java Card Applet开发:OO还是C-style?

近日又在重构PBOC 2.0的EDEP,按客户的需求改了几十个细节. 改动过程中对面向对象的理解有点加深. 例如为了避免两个class相互依赖,可以用一个Interface居中作为解耦. 由于卡内空间有限,资源紧缺,在设计时应注意避免继承层次过深. 个人感觉,由于资源有限,不大可能大量应用各种设计模式. JAVACARD API中比较显眼的设计模式只有两个:单例模式.Builder模式. 这两个模式的应用也是为了节约资源,以及为applet开发者屏蔽底层硬件细节. 上海有一家芯片公司,曾经试图研

深入JVM虚拟机(三) Java GC垃圾收集

深入JVM虚拟机(三) Java GC垃圾收集 1 Java GC垃圾收集 1.1 GC的概念 Java GC(Garbage Collection,垃圾收集,垃圾回收)机制,是Java与C++/C的主要区别之一,作为Java开发者,一般不需要专门编写内存回收和垃圾清理代码,对内存泄露和溢出的问题,也不需要像C程序员那样战战兢兢.这是因为在Java虚拟机中,存在自动内存管理和垃圾清扫机制.概括地说,该机制对 JVM(Java Virtual Machine)中的内存进行标记,并确定哪些内存需要回

自我总结 (三) --(Java Web学习)

自我完善的过程就是在不断的自我总结不断的改进. 在前的近半个月里,我们经过了考试,也开始了java web的项目. 先看看这次的考试.考完之后我就觉得有点不对劲的,结果 结果真的是一塌糊涂.上周五的时候成绩就出来了.班上一半的人及格,一半的人不及格.最后老师也没有给我们每个人的分数.最高的分数才69分.我想我应该是没有及格的吧!笔试和机试都是一塌糊涂的.之后老师也没有给我讲机试笔试的题.我们的笔试,试卷又不可以带走.做完老师就把试题给收上去了(想想怎样可以去找到这些题呢). 改进的方面: 经过这

实验三 java敏捷开发与XP

一.实验内容 (一)敏捷开发与XP 软件开发流程的目的是为了提高软件开发.运营.维护的效率,并提高软件的质量.用户满意度.可靠性和软件的可维护性. 光有各种流程的思想是不够的,我们还要有一系列的工具来保证这些思想能够在实践中有效率地运作.一个常见的公式是:软件工程=开发流程+工具.敏捷开发(Agile Development)是一种以人为核心.迭代.循序渐进的开发方法.“敏捷流程”是一系列价值观和方法论的集合. 其中,极限编程(eXtreme Programming,XP)是 是一种全新而快捷的

Java基础学习笔记三 Java基础语法

Scanner类 Scanner类属于引用数据类型,先了解下引用数据类型. 引用数据类型的使用 与定义基本数据类型变量不同,引用数据类型的变量定义及赋值有一个相对固定的步骤或格式. 数据类型 变量名 = new 数据类型(); 每种引用数据类型都有其功能,我们可以调用该类型实例使用其功能. 变量名.方法名(); Scanner类 Scanner类可以完成用户键盘录入,获取到录入的数据. Scanner使用步骤: 导包: import java.util.Scanner; 创建对象实例:Scann

实验三 Java敏捷开发与XP实践

北京电子科技学院(BESTI) 实     验    报     告 课程:Java程序设计                         班级:1353            姓名:陈巧然      学号:20135310 成绩:             指导教师:娄佳鹏              实验日期:2015.6.3 实验密级:         预习程度:             实验时间:18:00-24:00 仪器组次:10          必修/选修: