第 9章 Applet基础
Java一问世就如此热门,其根本原因在于 Java具有
,让 Internet动起来,的能力。具体地说,就是 Java
能创建一种特殊类型的程序(通常称作,小应用程序,
或者 Applet),具备 Java执行能力的 Web浏览器可从网上下载这种程序,然后运行。
目前,几乎所有浏览器均支持动态 HTML( DHTML)
和脚本编制(支持 XML),所以比起 Java一问世的时候,浏览器的功能要强大很多。尽管如此,由于小应用程序是用一种 Java语言编写的,所以同 HTML、
XML和脚本语言的任何一种可能的组合相比,它仍然具有广阔的应用前景。
本章要点
Applet运行原理
Applet的 HTML标记和属性
多媒体应用
JAR文件
9.1 Applet运行原理
Java小应用程序( Java Applet)是使用 Java语言编写的一段代码,它能够在浏览器环境中运行。
Applet与 Application地主要区别在于它们的执行方式不同,Application是使用命令行命令直接运行,从其 main()
方法开始运行的;而 Applet则是在浏览器中运行的,首先必须创建一个 HTML文件,通过编写 HTML语言代码告诉浏览器载入何种 Applet以及如何运行,再在浏览器中给出该 HTML文件的 URL地址即可,Applet本身的执行过程也较 Application复杂。
回忆一下小应用程序的书写格式
import java.applet.*;
public class MyApplet extends Applet{ … ; }
每一个小应用程序都继承自 java.applet.Applet类,并且每个小应用都有一个主程序类,之前必须加上 public。
Applet其实是一种能够在浏览器( Web)中运行的特殊的图形用户界面程序。
9.1 Applet运行原理
2.1 所有小应用程序的根源http://someLocation/file.html 1,Browser loads URL
<Html>
<Applet code= ….>
</Applet>
2,Browser loads
HTML document
Applet class
3,Browser loads
applet classes
Location,http://someLocation/file.html
Loading...
4,Browser
run applet
applet
BrowserSERVER 本地程序
file
SERVER
local
applet被下载的与 applet无关的本地方法小应用程序的限制
9.1 Applet运行原理看看我们以前学过的一个简单例子:
import java.awt.Graphics; //引入图形类 Graphics
import java.applet.Applet; //引入 Applet类
public class Example extends Applet
{ String show_text ;
public void init ()
{ show_text = "Hello World";
}
public void paint(Graphics g)
{
g.drawString (show_text,25,25) ;
//在坐标为( 25,25)的地方显示字符串 show_text
}
}
<HTML>
<HEAD>
<TITLE>Hello World</TITLE>
</HEAD>
<applet code=" Example.class"
width=300 height=300>
</applet>
</HTML>
Example.java
9.1 Applet运行原理
Java.applet.Applet
public void init() public void destroy()
public void start() public void stop()
public void paint(Graphics g)
Applet的运行控制
9.1 Applet运行原理
Applet的生命周期初始态(瞬态)
运行态停止态消亡态离开 Web页面:极小化或装入其他页面,
调用 stop()方法重新装入或改变页面大小或返回 Web页面,
调用 start()方法关闭浏览器,调用 stop()、
destroy()方法第一次装入,构造 applet
类,调用 init()方法 调用 start()方法
9.1 Applet运行原理
Applet中没有 main()方法。当 Applet被浏览器运行时,
init(),start(),stop(),destroy()方法等自动执行:
init()方法:初始化,自动调用,只执行一次。本方法主要完成一些在 Applet构造方法所不能完成的工作。
start()方法:初始化后,重入等都将自动调用。本方法是 Applet的主体,在其中可以执行一些任务或启动相关的线程来执行任务。
stop()方法:离开 Applet所在页面时调用,以停止消耗系统资源。
destroy()方法:浏览器关闭时自动调用,以清除 Applet
所用的所有资源。
9.1 Applet运行原理除了四个 Applet生命周期控制的方法外,Applet类还提供了一些其他有用的方法:
public AppletContext getAppletContext()
public String getAppletInfo(),应该被重写
public URL getDocumentBase()
public URL getCodeBase()
public String getParameter(String name)
public String[][] getParameterInfo(),应该被重写
public void showStatus(String msg)
public boolean isActive()
9.1 Applet运行原理
HTML中 applet标签的使用
< APPLET
[ARCHIVE = archiveList ]
[CODEBASE = codebaseURL]
CODE = appletFile
[ALT = alternateText]
[NAME = appletInstanceName]
WIDTH = pixels HEIGHT = pixels
[ALIGN = alignment]
[VSPACE = pixels] [HSPACE = pixels]
>
[< PARAM NAME = appletParameter1 VALUE = value >]
[< PARAM NAME = appletParameter2 VALUE = value >]
.,,
[alternateHTML]
</APPLET>
9.2 Applet的 HTML标记和属性
ARCHIVE = archiveList [File1,File2,…]
给出了 Applet类及其运行时所需的类所在的卷文件名。
CODEBASE = codebaseURL
指明 Applet类文件所在 URL基址,在 Applet类中,方法 getCodeBase()
可以获取该属性。如果这个属性没有指明,那么 Applet类文件必须与包含它的 HTML页面在同一个地方,方法 getCodeBase()返回的值与
getDocumentBase()相同。
CODE = appletFile
指明需要运行的 Applet类文件(,class文件),该文件是与
codebaseURL相关的。
NAME = appletInstanceName
给出了 Applet类运行时的实例名,这使得同处于一个页面的不同
Applet之间能够相互通信。方法 getAppletContext()可以得到同一个方页面中其它 Applet类。
9.2 Applet的 HTML标记和属性
9.2 Applet的 HTML标记和属性
ALT = alternateText
如果浏览器支持 Applet但不能运行它,就显示 alternateText中 所给出的文字。否则就忽略它。
WIDTH = pixels HEIGHT = pixels
Applet在浏览器中所显示的高度和宽度(以象素为单位)。
ALIGN = alignment
Applet在浏览器中显示时的对齐方式,其含义与效果与图片在 HTML
中的一样。其取值有,left,right,top,texttop,middle,absmiddle,
baseline,bottom,absbottom。
VSPACE = pixels HSPACE = pixels
Applet在浏览器中显示时上下、左右要预留的高度和宽度,其含义与效果与图片在 HTML中的一样。
9.2 Applet的 HTML标记和属性
Java applet
其它内容其它内容
vspace
hs
pa
ce
其它内容
vspace
其它内容 hspa
ce
hei
ght
width
9.2 Applet的 HTML标记和属性
< PARAM NAME = appletParameter1 VALUE = value >
<PARAM>属性可以使得 Applet能够从页面中获取所需的参数。
Applet可以用其方法 getParameter()获取 <PARAM>属性指定的参数。
<PARAM>属性的作用与应用程序中 main()方法里参数 String args[]的作用是一样的。
一个好的小应用程序,应该提供用户能够设置外部参数的功能,以使得用户能够根据自己的需要来应用它。方法 getParameterInfo()可以得到有关 <PARAM>属性的说明信息。
alternateHTML
如果浏览器不支持 Applet,就解释 alternateHTML所给出的 HTML代码。否则就忽略它。
9.2 Applet的 HTML标记和属性
public class AppletPara
extends Applet
{
String s1,s2;
public void init()
{
s1 = getParameter("p1");
s2 = getParameter("p2");
}
public void paint(Graphics g)
{
g.drawString(s1,10,10);
g.drawString(s2,10,30);
}
}
<HTML>
<HEAD>
<TITLE>Applet Parameter Test</TITLE>
</HEAD>
<applet code=“AppletPara.class"
width=300 height=300>
<param name=p1 value="1111111">
<param name=p2 value="2222222">
</applet>
</HTML>
两个步骤:
在 Applet类中:
s1 = getParameter("p1");
在页面中设置 Applet参数:
<param name=p1 value="1111111">AppletPara.java
9.2 Applet的 HTML标记和属性
public class AppletApp extends Applet
{
public String s;
public void init()
{
s = new String(“Hello World!”);
}
public void paint(Graphics g)
{
g.drawString(s,25,25);
}
}
一个 Java类文件可以既是一个 Java Applet,又是一个
Java Application,只不过在编写时稍微复杂一些而已,但它却既可以在浏览器中运行,又可以作为 Application单独运行。
public static void main( String args[] )
{
Frame f = new Frame(“Applet-App”);
AppletApp app = new AppletApp();
f.add(app,“Center”);
f.setSize(200,200);
f.setVisible(true);
f.addWindowListener( new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
app.init();
app.start();
} AppletApp.java
9.2 Applet的 HTML标记和属性
9.3 多媒体应用 —播放声音
Java语言提供了播放声音的方法,但目前 Java核心类包中只支持,*.au”格式的声音( 扩展类包和其他第三方类包可以支持更多地声音格式 ),而且只有在 Applet中才能播放声音,
Application中是不行的。有两种方法可以在 Applet中实现播放声音。
第一种方法是利用 Applet类提供的方法直接播放声音:
public void play(URL url)
public void play(URL url,String name)
例,play( getCodeBase(),“boing.au”);
但这两个方法是一次性播放的,不能反复播放。要想反复播放,就必须使用第二种方法。
第二种方法是利用接口 java.applet.AudioClip和 Applet类一起实现声音播放。接口 AudioClip中有三个方法:
public void play():播放一遍
public void loop(),循环播放
public void stop(),停止播放
AudioClip是一个接口,因此不能直接 new出一个声音对象实例,它必须和 Applet类一起使用,利用 Applet类提供的声音装载方法载入一个声音文件,形成一个声音对象实例:
public AudioClipgetAudioClip(URLurl)
public AudioClipgetAudioClip(URLurl,String name)
装载的声音文件后,就可以得到一个实现了 AudioClip接口的类的实例,通过该实例,利用 AudioClip的方法就可以来进行声音操作了。
9.3 多媒体应用 —播放声音
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class Example9_1 extends Applet implements
ActionListener
{ AudioClip clip;//声明一个音频对象
Button button_play,button_loop,button_stop;
public void init()
{ clip=getAudioClip(getCodeBase(),"1.au");
//根据程序所在的地址处的声音文件 1.au创建音频对象,Applet类的
// getCodeBase()方法可以获得小程序所在的 html页面的 URL地址
button_play=new Button("开始播放 ");
button_loop=new Button("循环播放 ");
button_stop=new Button("停止播放 ");
button_play.addActionListener(this);
button_stop.addActionListener(this);
button_loop.addActionListener(this);
add(button_play); Example9_1,java
9.3 多媒体应用 —播放声音
add(button_loop);
add(button_stop);
}
public void stop()
{ clip.stop();//当离开此页面时停止播放。 }
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==button_play)
{ clip.play();}
else if(e.getSource()==button_loop)
{ clip.loop();}
if(e.getSource()==button_stop)
{ clip.stop(); }
}
} Example9_1,java
9.3 多媒体应用 —播放声音
9.3 多媒体应用 —绘制图形和图像
Java图形对象可分为三种:
一是形状图形对象。它是一些几何图形类型,如矩形、椭圆、直线和曲线,每种形状对象实现
Java.awt.Shape接口。
二是文本图形对象。它可以按不同的字体、风格和颜色输出。
三是图像图形对象。它是
java.awt.image.BufferedImage类的对象。
由于内容编排的关系,本节主要讲述基础性形状和图形对象的绘制。
9.3 多媒体应用 —绘制图形和图像
绘制文本由于字符串可以用字符串对象、字符数组、字节数组这三种不同形式表示,故 Java在 Graphics类中相应地提供了三个成员方法来绘制这三种不同形式的字符串:
1.drawstring(String s,int x,int y)方法从参数 x,y指定的坐标位置处,从左 到右绘制参数 s指定的字符串。
2.drawChar(char[] ch,int offset,int length,int x,int y)方法绘制
data数组中的部分字符,length指定数组中要连续绘制的字符的个数,offset是首字符在数组中的位置。
3.drawBytes(byte[] by,int offset,int length,int x,int y)方法绘制
byte数组中的部分字节,从 x,y坐标处开始绘制 length个字符。
9.3 多媒体应用 —绘制图形和图像
绘制直线
drawLine(int x1,int y1,int x2,int y2)方法绘制从起点 (x1,y1)到终点 (x2,y2)的直线段。
9.3 多媒体应用 —绘制图形和图像
绘制矩形
drawRect(int x,int y,int w,int h)方法绘制矩形,fillRect(int
x,int y,int w,int h)方法填充矩形。矩形的左上角的坐标有参数 x和 y指定,矩形的宽和高由参数 w和 h指定。
9.3 多媒体应用 —绘制图形和图像
绘制椭圆与圆弧
drawOval(int x,int y,int w,int h)方法绘制椭圆,fillOval(int x,int y,
int w,int h)方法绘制填充椭圆。 x,y给出椭圆距 X轴和 Y轴的距离,
参数 w,h给出椭圆的宽和高。
和椭圆一样,圆弧也是根据其外接矩形绘制的,可看作是椭圆的一部分。绘制和填充圆弧的方法如下:
1.drawArc(int x,int y,int width,int height,int starAngle,int
arcAngle)方法绘制圆弧。
2.fillArc(int x,int y,int width,int height,int starAngle,int arcAngle)
方法填充圆弧。
9.3 多媒体应用 —绘制图形和图像
绘制多边形多边形类 Polygon封装了坐标空间中一个二维区域的描述。这个区域由任意多条线段围成,每条线段都是多边形的一条边。在内部,
多边形包含坐标 (x,y)的一个序列,每对坐标定义多边形的一个顶点,
两对相邻坐标就是多边形一条边的端点。第一个和最后一个点 (x,y)
通过封闭多边形的一条线段连接。
drawPolygon(int xPoints[],int yPoints[],int nPoints)方法绘制多边形,fillPolygon(int xPoints[],int yPoints[],int nPoints)方法填充多边形。
9.3 多媒体应用 —绘制图形和图像
显示图像
Java支持主要两种图像格式,GIF和 JPEG。 Applet类提供一个重要的方法:
public Image getImage(URL url,String name)
这个方法返回可以被显示在屏幕上的 Image对象的引用,也就是将
URL地址中文件名为 name的文件加载到内存,并返回该内存的首地址。
JAR文件通过一种改进的方法了加载类文件。它允许把所有需要的类文件打包成一个单一的文件。然后通过向服务器发出一个单一的 HTTP请求,就可以下载这个文件。此存档 Java类文件称为 Java存档文件( JAR)。 JAR文件可包括类文件和其他类型的文件,如图像和声音文件。 JAR 文件格式是以流行的 ZIP文件格式为基础,用于将许多个文件聚集为一个文件。与 ZIP文件不同的是,JAR 文件不仅用于压缩和发布,而且还用于部署和封装库、组件和插件程序,并可被像编译器和虚拟机这样的工具直接使用。在 JAR中包含特殊的文件,如 Manifests
和部署描述符,用来指示工具如何处理特定的 JAR。 一个 JAR文件可以用于:
9.4JAR文件用于发布和使用类库。
作为应用程序和扩展的构建单元。
作为组件,Java Applet或者插件程序的部署单位。
用于打包与组件相关联的辅助资源。
利用 jar工具来创建 JAR文件(默认安装时,它位于 jdk1.5.0/bin目录下)。创建
JAR文件的语法格式如下:
9.4JAR文件
jar cvf JARFileName File1 File2 ……
例如:
jar cvf MyClasses.jar *.java icon.gif