三: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元素,能够建立标准的图形用户界面,如窗体、button、滚动栏等等。眼下,在网络上有许多的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页面添加了button等功能,从而添加了交互性。
JavaApplet和JavaApplication在执行方面的主要差别表如今:Java Application通常是在本地机上执行,而Java Applet一般放在server上,它是依据本地机的请求被下载到本地机,然后才在本地机上执行。
三、基本框架
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是从远端server上下载而且在本地执行,所以安全性就显得格外重要。通过限制applet在沙箱(applet的执行环境)中执行,保证了对本地系统而言applet是安全的。
applet在沙箱中执行时:
⑴ 不能执行不论什么本地可执行程序;
⑵ 除了存放下载的applet的server外,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的更多相关文章
- 20145208 实验三 Java面向对象程序设计
20145208 实验三 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 实验步 ...
- 多线程(三) java中线程的简单使用
java中,启动线程通常是通过Thread或其子类通过调用start()方法启动. 常见使用线程有两种:实现Runnable接口和继承Thread.而继承Thread亦或使用TimerTask其底层依 ...
- Android JNI学习(三)——Java与Native相互调用
本系列文章如下: Android JNI(一)——NDK与JNI基础 Android JNI学习(二)——实战JNI之“hello world” Android JNI学习(三)——Java与Nati ...
- 实验三 Java基本程序设计(2)
实验三 Java基本程序设计(2) ...
- JAVA card 应用开发(三) 把APPLET(CAP文件)装载到卡片
依据前面两篇博文.我们能够在Eclipse上建立好Applet.而且能够有多个AID.能够选择不同的应用. 那么,以上我们都是基于模拟环境的逻辑,实际上有些函数接口是须要实际的环境.就是说我们须要把A ...
- 我的Java之旅 第三课 从Applet到JSP
一.Applet Applet是一种特殊的Java程序,它本身不能单独运行(因为本身没有main()),需要嵌入在一个HTML文件中,借助浏览器或者appletviewer来解释执行. App ...
- java提高篇(三)-----java的四舍五入
Java小事非小事!!!!!!!!!!!! 四舍五入是我们小学的数学问题,这个问题对于我们程序猿来说就类似于1到10的加减乘除那么简单了.在讲解之间我们先看如下一个经典的案例: public stat ...
- 实验三 java敏捷开发与XP
一.实验内容 (一)敏捷开发与XP 软件开发流程的目的是为了提高软件开发.运营.维护的效率,并提高软件的质量.用户满意度.可靠性和软件的可维护性. 光有各种流程的思想是不够的,我们还要有一系列的工具来 ...
- Java小应用程序Applet,画布上新建按钮和文本
<pre name="code" class="java">package com.hx; import java.applet.*; import ...
随机推荐
- Nginx+Tomcat+Memcached实现会话保持(MSM)
会话保持的三种方式 Session sticky会话绑定:通过在前端调度器的配置中实现统一session发送至同一后发端服务器 Session cluster会话集群:通过配置Tomcat保持所有To ...
- [TypeStyle] Style CSS pseudo-classes using TypeStyle with $nest
TypeStyle is a very thin layer on top of CSS. In this lesson we show how to change styles based on p ...
- View的事件分发机制解析
引言 Android事件构成 在Android中,事件主要包含点按.长按.拖拽.滑动等,点按又包含单击和双击,另外还包含单指操作和多指操作.全部这些都构成了Android中的事件响应.总的来说.全部的 ...
- 【33.10%】【codeforces 604C】Alternative Thinking
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- LinearLayout的一些注意事项 分类: H1_ANDROID 2013-10-26 23:01 856人阅读 评论(0) 收藏
1.orientation的默认值为horizontal,即从左向右排列.由于一般从上向下排列,所以必须指定orientation属性. 2.layout_gravity与gravity的区别: (1 ...
- 从Ecipse中导出程序至apk 分类: H1_ANDROID 2013-10-26 22:17 516人阅读 评论(0) 收藏
若未有数字证书: 1. 2. 3. 4. 5. 若已有数字证书: 上面的后3步改为 版权声明:本文为博主原创文章,未经博主允许不得转载.
- Android OkHttp网络连接封装工具类
package com.lidong.demo.utils; import android.os.Handler; import android.os.Looper; import com.googl ...
- 忙里偷闲( ˇˍˇ )闲里偷学【C语言篇】——(9)链表
我们至少可以通过两种结构来存储数据 数组 1.需要一整块连续的存储空间,内存中可能没有 2.插入元素,删除元素效率极低. 3.查找数据快 链表 1.查找效率低 2.不需要一块连续的内存空间 3.插入删 ...
- [Angular Form] ngModel and ngModelChange
When using Radio button for Tamplate driven form, we want to change to the value change and preform ...
- Android组件——使用DrawerLayout仿网易新闻v4.4侧滑菜单
摘要: 转载请注明出处:http://blog.csdn.net/allen315410/article/details/42914501 概述 今天这篇博客将记录一些关于DrawerL ...