Java—Applet
1 Applet的定义
Applet是Java语言编写的,无法独立运行,但可以嵌入到网页中执行。它扩展了传统的编程结构和方法,可以通过互联网发布到任何具有Java编译环境浏览器的个体计算机上。
如下所示是独立的Java应用程序和applet程序之间重要的不同:
- Java中applet类继承了 java.applet.Applet类
- Applet类没有定义main(),所以一个 Applet程序不会调用main()方法,
- Applets被设计为嵌入在一个HTML页面。
- 当用户浏览包含Applet的HTML页面,Applet的代码就被下载到用户的机器上。
- 要查看一个applet需要JVM。 JVM可以是Web浏览器的一个插件,或一个独立的运行时环境。
- 用户机器上的JVM创建一个applet类的实例,并调用Applet生命周期过程中的各种方法。
- Applets有Web浏览器强制执行的严格的安全规则,applet的安全机制被称为沙箱安全。
- applet需要的其他类可以用Java归档(JAR)文件的形式下载下来。
2 Applet的用途
用户可以静态显示Applet,像显示一幅图片或者一段文本一样;Applet也可以是一个动态交互过程,用户输入简单的数据,就会产生相应的响应。
3 Applet的编写格式
编写Applet时,首先要引入java.applet包中的类,这个类里包含三个接口和Applet的类:
import java.applet.*;
import java.applet.Applet;
类头定义为:
public class MyApplet extends Applet;
用来声明自定义类是从Applet类扩展而来的。
4 Applet的生命周期
public void init(); 初始化—在这个方法中设置一些变量的初始化,像界面布局设置等。目的是为你的applet提供所需的任何初始化。在Applet标记内的param标签被处理后调用该方法。
public void start() 启动—Applet开始执行。浏览器调用init方法后,该方法被自动调用。每当用户从其他页面返回到包含Applet的页面时,则调用该方法。
public void stop() 停止—Applet停止执行。当用户从包含applet的页面移除的时候,该方法自动被调用。因此,可以在相同的applet中反复调用该方法。
public void destroy() 撤消—销毁Applet。此方法仅当浏览器正常关闭时调用。因为applets只有在HTML网页上有效,所以你不应该在用户离开包含Applet的页面后遗漏任何资源.
paint: 该方法在start()方法之后立即被调用,或者在applet需要重绘在浏览器的时候调用。paint()方法实际上继承于java.awt。
例:该类显示系统当前时间
import java.applet.Applet;
import java.awt.Frame;
import java.awt.Graphics;
import java.text.SimpleDateFormat;
import java.util.Date; public class UseApplet extends Applet {
/**
* @Applet应用程序
*/
private static final long serialVersionUID = 1548429421196793116L;
String strTime;
public void init()
{
Frame f=new Frame("欢迎");
f.setSize(800,300);
}
public void start()
{
Date d = new Date();
SimpleDateFormat time=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
strTime=time.format(d);
repaint();
}
public void paint(Graphics g)
{
g.drawString("当前时间为:" + strTime,10,30);
} }
5 Applet的显示
Applet是嵌入在HTML网页中显示的。首先从服务器请求HTML网页,检测到Applet的类请求时,将所需类下载到本地,然后运行。
HTML页面中引用Applet的标签为<applet></applet>,浏览器中执行Applet的步骤如下:
(1) 浏览器请求HTML页面。
(2) 读HTML页面的过程中发现<applet>标签,然后继续向服务器请求标签中声明的类文件。
(3) 浏览器获取该类文件。
(4) 字节码验证这个类是否合法。
(5) 如果合法就开始执行类文件。
为上面的UseApplet.class类写一个最简单的网页UseApplet.html:
<html>
<body>
<applet code = "UseApplet.class" height = 200 width = 300>
</applet>
</body>
</html>
6 参数设置
在HTML页面中嵌入Applet类文件时,可以在<applet>标签中设置属性以控制Applet类文件的外观显示,也可以传递一些用户自定义属性。嵌入的格式为:
<applet attributes1>
<param attributes2>
...
</applet>
其中:
(1) <applet></applet>标签内为Applet的信息。
(2) <param>标记在<applet></applet>之间进行设置,然后由Applet自带的方法获取。
(3) <param>标记有两个自己的属性:name和value。例如:
<param name ="aaa"value = "bbb">
(4) attribute1和attribute2的属性设置如表所示。
其中,code属性是必须的,height和width属性用来设置高度和宽度,如果都为0,那么Applet将隐藏。
对于例4.1中UseApplet.html,如果有
<applet code = "UseApplet.class" height = 200 width = 300>
</applet>
那么说明网页加载的类名为UseApplet.class,类显示的高度为200像素点,宽度为300像素点。
表中列出的attibute1属性为<applet>定义的属性。用户还可以根据Applet程序的需要,传递一些程序自身属性,这些属性通过attribute2中name属性给出所需参数的名,value属性给出所需参数的值。
public String getParameter(String name)
例:在加载类的网页上设置一个用户名,使得Applet输出为“HaHa,你好,当前时间为:(具体时间)”
import java.awt.*;
import java.applet.Applet;
import java.util.Date;
public class UsePara extends Applet
{
String strTime = new String();
String strUser = new String();
public void init()
{
//得到网页的参数:用户名
strUser = getParameter("USER");
}
public void start()
{
Date d = new Date();
SimpleDateFormat time=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
strTime=time.format(d);
repaint();
}
public void paint(Graphics g)
{
g.setColor(Color.red);
g.drawString(strUser + " 你好,当前时间为:" + strTime,20,30);
}
}
在UseApplet.html中添加一个用户参数设置:<param name = "USER" value = HaHa>
<html>
<body>
<applet code = "UsePara.class" height = 200 width = 400>
<param name = "USER" value = HaHa>
</applet>
</body>
</html>
7 载入图片
在java.applet包中存在一个接口AppletStub。当一个Applet创建之后,一个Applet Stub使用setStub方法附加到Applet上,这个Stub用来充当Applet和浏览器环境之间的接口。在这个接口中一个重要的方法:
public URL getDocumentBase()
该方法返回的是Applet类文件所在网页的网络路径。
例如,如果一个Applet类文件嵌入在下面网页中
http://java.sun.com/products/jdk/1.2/index.html
那么返回的路径为
http://java.sun.com/products/jdk/1.2/
通过这个网络路径可以得到图片,从而由Applet类载入,载入图片的方法为:
public Image getImage(URL url, String name)
其中:
(1) url给出图片所在的网路路径。
(2) name给出图片的名字。
例如:url路径可以为http://java.sun.com/products/jdk/1.2/,而name可以为路径下的图片index_01.gif。
例:编写Applet,载入Applet类文件所在路径下的图片index_01.gif,然后如图所示显示图片。
import java.awt.*;
import java.applet.Applet;
import java.net.*;
public class UseImage extends Applet
{
//定义图像对象
Image testImage;
public void init()
{
//得到图片
testImage = getImage(getDocumentBase(),"index_01.gif");
}
public void paint(Graphics g)
{
g.drawImage(testImage,0,0,this);
}
}
载入UseImage.class类的UseImage.html文件如下:
<html>
<body>
<applet code = "UseImage.class" height = 200 width = 300>
</applet>
</body>
</html>
8 载入声音
Applet类提供一个用于载入声音的方法,即
public AudioClip getAudioClip(URL url, String name)
该方法返回由url和name决定的AudioClip对象。
其中:
(1) url:音频剪辑的绝对URL地址;
(2) name:相对于上面的url,为音频剪辑的相对地址,通常指名字。
例:编写载入声音的Applet。
import java.awt.*;
import java.applet.Applet;
public class UseAudio extends Applet
{
public void init()
{
}
public void start()
{
//播放Applet所在目录下的tiger.au声音文件
getAudioClip(getDocumentBase(),"tiger.au").play();
}
};
载入类的HTML文件如下:
<html>
<body>
<applet code = "UseAudio.class" height = 200 width = 300>
</applet
</body>
</html>
在浏览器加载或者appletviewer命令启动时可以听见老虎的叫声,但必须保证tiger.au在UseAudio.class类文件所在的目录。
9 Applet控制浏览器环境
java.applet包中提供一个接口AppletContext,对应着Applet的环境,主要指包含Applet的网页文档等,在这个接口内有两个重要方法:
pubilc void showDocument(URL url)
浏览器下载Applet时,showDocument可以将当前Applet页面用于显示url网址的内容。 url 给出页面的绝对网络路径。
public void showDocument(URL url, String target)
target可以表明url显示的位置,有四种情况,如表所示。
public void showStatus(String status)
字符串status显示在状态栏中,告知用户当前类文件运行中的状态。
例:编写Applet,在状态栏显示鼠标单击Applet的次数
import java.applet.*;
import java.applet.Applet;
import java.awt.event.*;
public class ShowStatus extends Applet
{
int count = 0;
public void init()
{
}
public boolean mouseClicked(MouseEvent e)
{
count ++;
getAppletContext().showStatus("你好,你已经点击了" + count + "次了!");
return true;
}
}
例:编写Applet,在一个框架中显示不同来源的网页信息,如图所示。左框架为西安交通大学首页,右框架为新浪网首页。
import java.applet.*;
import java.applet.Applet;
import java.net.URL; public class ShowHtml extends Applet
{
public void init()
{
}
public void start()
{
try
{
//创建URL对象
URL urlName=new URL("http://www.xjtu.edu.cn");
//在左框架显示网页
getAppletContext().showDocument(urlName,"left");
urlName = new URL("http://www.sina.com.cn");
//右框架显示网页
getAppletContext().showDocument(urlName,"right");
}
catch(MalformedURLException e)
{
System.out.println(e.getMessage());
}
}
}
载入Applet的网页Head.html的代码如下:
<html>
<body>
<applet code = "ShowHtml.class" height = 0 width = 0>
</applet>
<h3>这是一个框架网页,上面的框架隐藏载入applet类文件,由applet控制左框架显示西安交通大学的主页,右框架显示新浪网的主页。
</body>
</html>
装配的框架网页ShowHtml.html的源代码如下,可以看见其中框架名字左边的为left而右边的为right。
<html>
<frameset rows="21%,*">
<frame name="guid" src="Head.html">
<frameset cols="50%,*" frameborder="YES" border="1" framespacing="1">
<frame name="left" src="">
<frame name="right" src="">
</frameset>
</frameset>
</html>
10 服务器下配置Applet文件
由于Applet文件是客户端浏览器从服务器端下载的HTML网页,所以将文件配置到服务器端,由客户进行访问。
本机中使用的服务器为Tomcat 4.0,安装成功后重启动,则服务器开始运转,在浏览器的网址栏键入http://10.167.27.139:8080/index.html,如果出现如图所示的Tomcat主网页,则证明服务器测试正常。
11 JAR文件
在JDK的安装目录的bin子目录下有一个jar.exe文件,这就是JAR文件的操作工具,用它及一系列选项来实现对JAR文件的操作。jar命令的格式如下:
jar {ctxu}[vfm0M] [jar-文件] [manifest-文件] [-C 目录] 文件名 ...
其中:
(1) ctxu四者必选其一,各选项的含义如下:
-c 创建新的存档;
-t 列出存档内容的列表;
-x 展开存档中命名的(或所有的)文件;
-u 更新已存在的存档。
(2) vfm0M为可选项,各选项的含义如下:
-v 生成详细输出到标准输出上;
-f 指定存档文件名;
-m 包含来自标明文件的标明信息;
-0 只存储方式,未用ZIP压缩格式;
-M 不产生所有项的清单(manifest)文件;
-C 改变到指定的目录,并且包含下列文件。
(3) 清单(manifest)文件名和存档文件名都需要指定,指定的顺序依照命令行中“m”和“f”标志的顺序。
例如:
① 将两个class文件存档到一个名为“classes.jar”的存档文件中:
jar cvf classes.jar Foo.class Bar.class
② 用一个存在的清单(manifest)文件“mymanifest”将foo/目录下的所有文件存档到一个名为“classes.jar”的存档文件中:
jar cvfm classes.jar mymanifest -C foo/ .
对JAR文件常用的操作有三种:创建JAR文件、列出JAR文件和抽取JAR文件。
1). 创建JAR文件
jar cvf UseImage.jar UseImage.class index_01.gif
当用JAR工具创建新的档案时,自动增加一个声明文件到文档中。如果用户需要创建自己的声明文件时,则指定m选项。可以看到本目录下多了一个UseImage.jar文件。
2). 列出JAR文件的内容
jar tvf UseImage.jar
执行命令后列出JAR文件中的内容。
3). 抽取JAR文件
jar xvf UseImage.jar
抽取JAR文件是将JAR中包含的类以及相关文件逐一恢复。在某个目录下建立JAR文件夹,将JAR文件放入此文件夹,然后进行抽取,可以看见JAR目录下除了UseImage.class和index_01.gif,还有META-INF子目录,下面有一个文件MANIFEST.MF。
4). 客户端使用jar文件
<applet>标签中添加一个属性名字为archive,它的值为要载入的.jar文件。例如archive="UseImage.jar"。
例如,将某个目录下的UseImage.html文件代码改为:
<html>
<body>
<applet code = "UseImage.class" archive="UseImage.jar" height = 200 width = 300>
</applet>
</body>
</html>
12 Applet和应用程序
例:
import java.awt.*;
import java.awt.event.*;
import java.applet.Applet;
import java.util.Date;
public class AppPara extends Applet
{
String strTime = new String();
static String strUser = new String();
static boolean inApplet = true;
public void init()
{
//如果从Applet载入,从网页得到参数
if(inApplet)
strUser = getParameter("USER");
}
public void start()
{
Date d = new Date();
strTime = d.toString();
repaint();
}
public void paint(Graphics g)
{
g.setColor(Color.red);
g.drawString(strUser + " 你好,当前时间为:" + strTime,20,30);
}
public static void main(String[] args)
{
inApplet = false;
//如果从命令行提示符状态进入,获取参数
if (args.length < 1)
{
System.out.println("缺少用户参数");
System.exit(0);
}
else
strUser = new String(args[0]);
//创建一个框架
Frame f = new Frame("时间");
//关闭窗口时退出系统
f.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent evt)
{
System.exit(0);
}
});
//创建一个AppletApp对象
AppPara a = new AppPara();
//初始化
a.init();
//将对象载入框架
f.add("Center",a);
//设置框架大小
f.setSize(400,200);
//显示框架
f.show();
//启动对象
a.start();
}
}
在命令提示符状态键入命令“java AppPara 王飞”后按回车键,可弹出界面。
Java—Applet的更多相关文章
- The differences between Java application and Java applet
在Java语言中,能够独立运行的程序称为Java应用程序(Application).Java语言还有另外一种程序--Applet程序.Applet程序(也称Java小程序)是运行于各种网页文件中,用于 ...
- Java Applet与Java Application的区别
转自:http://www.educity.cn/java/500609.html 在Java语言中,能够独立运行的程序称为Java应用程序(Application).Java语言还有另外一种程序-- ...
- Java Applet使用
问题描述: Java Applet使用 参考资料: http://docs.oracle.com/javase/tutorial/deployment/applet/depl ...
- Java Applet与Java Application的特点
java application是应用程序,用于桌面开发,java applet是小应用程序,一般嵌入到网页里运行.applet一般用于B/S页面上作为插件式的开发,而application主要是桌面 ...
- 在浏览器运行 java applet时遇到的一些问题及其解决方法
运行 java applet时提示:您的安全设置已阻止本地应用程序运行,如何解决?如下图所示 这时候通过设置java的安全级别就可以了. 控制面板->程序->Java->安全 将安全 ...
- 使用Java Applet在客户端解压缩,以及使用证书的意义
以前解压缩是用Java Applet在客户端解压缩,而且用户不知道这回事.但是现在Chrome不支持NP API了,所以不得不把Java去掉,然后在服务器里解压缩.风险在于,解压缩以后,传输到客户端的 ...
- Java Applet实现五子棋游戏
从谷歌的AlphaGo到腾讯的绝艺,从人脸识别到无人驾驶,从谷歌眼镜到VR的兴起,人工智能领域在不断的向前迈进,也在不断深入的探索.但背后错综复杂的技术和利益成本也是很多企业亟待解决的难题.对于人工智 ...
- [java] 在linux+chrome/firefox上使用java applet
我现在的浏览器用不了java applet,我的环境是archlinux + chrome or firefox. java网站的指引是这样说的 按照这些说明操作,以便在 Ubuntu Linux 上 ...
- Java - 33 Java Applet基础
Java Applet基础 applet是一种Java程序.它一般运行在支持Java的Web浏览器内.因为它有完整的Java API支持,所以applet是一个全功能的Java应用程序. 如下所示是独 ...
随机推荐
- HTTPS强制安全策略-HSTS协议阅读理解
https://developer.mozilla.org/en-US/docs/Web/Security/HTTP_strict_transport_security [阅读理解式翻译,非严格遵循原 ...
- 学习OpenCV——Surf(特征点篇)&flann
Surf(Speed Up Robust Feature) Surf算法的原理 ...
- Asp.Net alert 方法
public static void ExcuteAlert(Page page, string strAlerts) { ClientScriptManager ...
- 10. 星际争霸之php设计模式--原型模式
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
- rocketmq简单搭建
摘要: 简单的部署管理RocketMQ队列 (nameserver broker在同一机器上) RocketMQ 是alibaba开源的消息队列. 本文使用的是开源版本v3.18 系统: centos ...
- [课程设计]Scrum 2.0 多鱼点餐系统开发进度(第二阶段项目构思与任务规划)
[课程设计]Scrum 2.0 多鱼点餐系统开发进度 1.团队名称:重案组 2.团队目标:长期经营,积累客户充分准备,伺机而行 3.团队口号:矢志不渝,追求完美 4.团队选题:餐厅到店点餐系统WEB ...
- YTU 2346: 中序遍历二叉树
原文链接:https://www.dreamwings.cn/ytu2346/2606.html 2346: 中序遍历二叉树 时间限制: 1 Sec 内存限制: 128 MB 提交: 12 解决: ...
- Hash表算法
出处:http://blog.csdn.net/v_JULY_v 第一部分:Top K 算法详解问题描述百度面试题: 搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的 ...
- ASP。net 测验
Login.aspx using System; using System.Collections.Generic; using System.Linq; using System.Web; usin ...
- 编写windows7 bat运行脚本
每天上班,打开电脑后,我总是会固定的打开几个软件.这是重复的工作,我要写脚本startup.bat,直接点击它,就可以启动这些软件了. 本文主要参考这里,只用到了start 和 @Rem 两个命令语句 ...