Applet
这章的内容主要是理解和编写运用Applet的过程,内容不多,相对比较容易理解,Applet的实现是一个模块套用另一个模块的过程,稍微特殊点的地方就是其中的运行机制和规则了。
一、浏览器显示网页及处理Applet代码过程
html标签是源代码中尖括号(<>)中的字符序列;
浏览器根据html标签的含意,用特殊的效果去显示标签所引用的内容。
在浏览器文件html源代码中添加如下代码来装载MyApplet.class(该文件事先要和html源文件放置在同一目录)
<applet code=MyApplet width=300 height=300></applet>
Applet是一个Java类,不同于其他的Java类,Applet是按下面的过程执行的:
浏览器载入要访问的HTML文件的URL地址;
浏览器载入HTML文件;
浏览器载入Applet的类字节代码;
启动Java虚拟机执行Applet。
以上操作要求IE浏览器中内嵌Java解释器。
二、Applet类及其方法
几乎大多数Applet小应用程序都重载一套方法。这些方法提供了浏览器或Applet小应用程序阅读器与Applet小应用程序之间的接口以及前者对后者执行进行控制的基本机制。
init()、start()、stop()和destroy()都是由Applet所定义的,paint()是由AWT组件定义的。只有非常简单的Applet小应用程序才不需要定义全部的方法。
init()方法中主要进行所有的初始化;
start()方法主要放置功能实现的启动代码;
stop()方法中来停止只有网页当前被显示时才要保持运行的功能;
destroy()方法用于释放init方法中初始化的资源;此方法只适用于Applet;
paint()方法中有一个Graphics类型的参数,该参数包含了图像上下文,描述了小应用程序的运行环境。每一次Applet小应用程序被重画后,paint()方法都会被调用。
编写程序定时轮循显示10幅图像以产生动画效果:
import java.applet.*;
import java.awt.*;
import java.net.*;
public class MyApplet extends Applet implements Runnable
{
Image [] imgs = new Image [10];
int index = 0;
public void init()
{
try{
for (int i = 0;i<10;i++)
{
//不能用本地路径来指定图像文件的位置;
imgs[i] = getImage(new URL(getCodeBase(),"img\\T" + (i+1) + ".gif"));
/*imgs[i] = getToolkit().getImage(new URL(getCodeBase(),"img\\T" + (i+1) + ".gif"));*/
}
new Thread(this).start();
}catch(Exception e){e.printStackTrace();}
}
public void paint(Graphics g)
{
g.drawImage(imgs[index],0,0,this);
g.setFont(new Font("隶书",Font.ITALIC|Font.BOLD,30));
index = (index+1)%10;// 让index的取值在0到9之间循环变化
g.drawString(" " + index,0,50);//将整数转化为字符串除了用String.valueOf(整数)方法外,“”+整数,即用空字符串与整数相连,也是常用的一种方式。
}
public void run()
{
while (true)
{
repaint();
try
{
Thread.sleep(100);
}catch(Exception e){}
}
}
}
三、URL类
URL(统一资源定位符,Uniform Resource Locator)用于表示Internet网络上的资源地址。一般由协议名、资源所在的主机名和资源本身的名称等三个部分组成。
如:http://www.it315.org/home/welcome.html
URL还可以包含端口号来指定要连接的远端主机端口
如:http://www.it315.org:8080/index.html
URL通常是大小写敏感的(除机器名外)
相对URL的使用,跟我们本地计算机上的文件系统的相对目录的使用非常相似。用“/”开头,表示主机上的某种协议的根目录;用“../”开头表示当前资源所在目录的父目录。
网页、Applet以及这些图像文件的相对路径关系是必须固定的,而Applet类又提供了getCodeBase方法返回Applet的URL,getDocumentBase方法返回网页的URL,我们就可以很容易想到用相对URL的方式来构造这些图像文件资源的URL。
即用:public URL(URL context,String spec)throw MalformedURLException来创建这些图像文件的URL对象。如果Applet与网页在同一路径,则不用设置网页中<applet code=MyApplet codebase=..>标记的codebase可选属性,图像文件与Applet作为一个整体提供,所有应该选用getCodeBase方法。
四、Update方法
程序调用repaint()方法导致的部件重绘过程中,AWT线程调用Component.update方法,Component.update再调用paint方法。
浏览器关闭之前,Java所创建的Applet对象不会消失,当WWW浏览器再回到创建此Applet对象的页面时,不会再创建新的Applet对象。
drawImage是一个异步方法,即使img对应的图像还没有完全装载,drawImage也会立即返回。
读者不仅要理解Applet,掌握编写和运用Applet的过程,还应仔细体会容器与插件的程序架构设计模式,如WWW服务器中的JSP技术,J2EE中的EJB技术等,以便自己在以后的程序设计中借鉴这种思想。