第八章 Applet小应用程序
8.1 applet基础 在浏览器内运行的java程序 applet仍然要比HTML、XML以及脚本技术的任意组合强大的多 跨平台 很安全 不能访触摸任何本地文件 不能访问源站点以外的网络资源 通过数字签名验证的可以做更多事情
当applet刚被开发出来时,只有sun的HotJava能查看包含applet的网页 Netscape 、IE的加入,使得applet真正流行起来 仅支持Java1.1的大部分功能 解决方法:Java插件 Java2 SDK 自动下载插件
一。什么是Japplet(Applet) 一个Java applet程序中必须有一个类是JApplet类的子类,称该子类为Java applet的主类 例:public class DrawImage extends JApplet 主类必须用public来修饰 主类的实例是一个容器
applet必须嵌入HTML文件中方可执行,因此HTML页必须告诉浏览器需加载哪个applet及在网页中的位置 <applet code=字节码文件名 width=n height=n> </applet> 例: <applet code=DrawImage.class width=200 height=300> </applet>
Applet可在浏览器下运行 c:\1000\boy.html 也可用JDK的开发工具中的appletviewer工具浏览Applet效果 c:\1000\appletviewer boy.html 如果一个HTML文件 中包含多个applet,那么运行时,将会弹出多个窗口
一个小技巧 可将applet标记作为注释添加到源程序中: /* <applet code=Not.class width=200 height=300> </applet> */ public class Not extends JApplet {…. } 然后用appletviewer来直接运行名为Not.java的源程序 appletviewer Not.java 例:Not.java
三.JApplet类 JApplet(Applet)类是所有applet的基类,所有的小应用程序都是该类的子类 import java.applet.*; public class Testapplet extends JApplet {…. }
public Image getImage( URL url) public Image getImage( URL 常用方法: 判断applet是否年于激活状态 public boolean isactive() 文件定位方法 public URL getCodeBase( ) public Image getImage( URL url) public Image getImage( URL url,String name) public AudioClip getAudioClip( URL url) public AudioClip getAudioClip( URL url,String name)
播放声音、显示图象、输出字符串方法 public void play(URL url) public void loop(URL url) public void drawImage(img,x,y) public void drawString(str,x,y) applet构成方法 public void init( ) public void start( ) public void stop( ) public void destroy( ) public void paintComponent( ) public void repaint( )
8.2一个applet的生存周期 JApplet中常用的几种常用方法 public class classname extends JApplet {public void init() {…………. } public void start() {………. } public void stop( ) {………… } public void destroy( ) {…………. } public void paintComponent(Graphics g) {………… } ……………. }
init( ) 当一个applet被系统执行时,系统将首先自动执行init( )方法 通常用init( )方法作一些初始化工作。如:创建对象、设置初始状态、加载图象等 public void init( ) {…… } Init()方法只能被执行一次
start( ) 系统在执行完init()后,将自动执行start() public void start( ) {….. } 每当离开Applet主页后再返回时,系统会再一次执行start( )方法 Start( ) 可被执行多次
stop()方法 当用户离开Applet所在的页面转到其它页面时,stop( )方法被调用 public void stop( ) {…… } 当浏览器又回到Applet所在页时,start( )方法又会被调用 stop( )也可被执行多次
destroy( ) 系统在浏览器关闭时才调用destroy( ) 调用destroy( )方法时,它将负责收回占用的系统资源
paintCompoment ( ) 可用paintCompoment (Graphics g)方法在屏幕上输出信息,如文字、色彩、图像等 当调用paintCompoment ()方法时,浏览器产生一个Graphics类的实例,并传给方法paintCompoment ( )中的参数g 利用g可调用Graphics类中的方法 例: g.drawString(“x=“+x,10,10)
当applet对页面有重绘的需求时,如:被其它页面遮挡之后重新放在最前面、改变浏览器的大小、以及applet要显示信息 paintCompoment()方法都会被自动调用
PaintCompoment()方法在applet的生命周期内可以被多次调用 例:下面的例子统计各方法被执行次数 MethodCount.java
public void init() {initcount=initcount+1;} public void start() {startcount=startcount+1;} public void stop() {stopcount++;} public void destroy() {destroycount++;}
public void paint(Graphics g) { paintcount++; g.drawString("initcount ="+initcount,10,20); g.drawString("startcount ="+startcount,10,40); g.drawString("stopcount ="+stopcount,10,60); g.drawString("destroycount="+destroycount,10,80); g.drawString("paintcount ="+paintcount,10,100); }
repaint() 你永远不要企图调用paintCompoment(),一般可通过调用repaint()方法时,实现对paintCompoment()的调用,repaint执行如下; 首先清除paintComponent( )方法以前所画内容 再调用paintCompoment()方法重画
例:一个字符串向下移动的例子 MoveString.java MouseDemo.java
8.3Applet的标记的属性---chart.java 一.定位属性 1.width\height 2.align RIGHT LEFT TOP BOTTOM MIDDLE ABSMIDDLE BASELINE ABSBOTTOM TEXTTOP VSPACE\HSPACE
如果applet类位于com.mycompany中,则: 二.代码属性 用于告诉浏览器如何定位applet代码 1.code 如果applet类位于com.mycompany中,则: Code=“com/mycompany/Myapplet.class” 2.codebase 此属性用于applet与HTML不在同一目录下的情形,如何搜索class文件
appletTest.class位于Myapplet子目录下,而Myapplet子目录与HTML文件在同一目录下 <applet code=“appletTest.class” CODEBASE=“Myapplet” width=200 height=300> </applet>
三.接收信息至applet中 Applet可以通过使用HTML中的PARAM标记获得内嵌在HTML上中的参数. 例:在HTML中定义如下: <applet code=DrawImage.class height=300 width=230> <param name=“font” value=“serif”> </applet>
在applet中可使用JApplet类中的 getParameter()来提取参数值 Public class FontParameterApplet extends JApplet { public void init() {String fontName=getParameter(“font”); …….} API:public String getParameter(String name) 例:chart.java
8.4多媒体 8.4.1 显示图象 一.Java支持的主要图像类型: GIF JPEG BMP
二.加载图象 定义Image对象 Image picture; 从文件加载图像--getImage()方法 public Image getImage( URL url, String name) 例:picture=getImage( getCodeBase(),”family.jpg”);
Graphics类提供drawImage()方法,可用来绘制图像 三.显示图像--DrawImage.java Graphics类提供drawImage()方法,可用来绘制图像 public boolean drawImage( Image img, int x,int y, ImageObserver observer)
该方法应在paintComponent()方法中通过参数g调用 例:g.drawImage(picture,10,30,this); 例:一个加载图像的例子DrawImage.java
可调整宽度和调度的drawImage()方法 public boolean drawImage( Image img, int x,int y, int width, int height, ImageObserver observer) 采用这些方法显示图象时,会自动对图象按指定的高度和宽度进行拉伸
Image类提供了两个方法,常用来和上述方法联合使用: getHetght()用来获得图象的实际高度 getWidth()用来获得图象的实际宽度 例: img.getHeight(this) img.getWidth(this)
8.4.2 播放声音 一.播放声音 目前Java仅支持AU、WAVE、MIDI、AIFF格式 AudioClip类用来在Java Applet中播放声音。该类在java.Applet.audioClip中有定义 二.加载声音文件 创建对象: AudioClip 对象名; 加载 声音文件 对象名=getAudioClip(URL url,文件名)
例:AudioClip audio; audio=getAudioClip(getCodebase( “spacemusic.au”); 三.播放声音 AudioClip类提供播放方法: play()--播放一遍 loop()--循环播放 例: audio.play(); audio.loop(); 例: 一个播放声音的小例子PicSound.java
8.4.3 JMF(Java Media Framwork) 作用: 1、音频播放 2、视频播放: avi,gsm,mpg,mov,rmf,rtp,viv 3、编写摄像头拍照程序 JMF下载地址: http://java.sun.com/products/ java-media/jmf/index.jsp
8.4.4 Java 语音API 核心技术:语音识别和语音合成 语音合成: 用于从文本中产生合成的语音 语音识别: 从包含语音的音频输入中产生文本
Java语音API的基本信息: Java.sun.com/products/java-media/speech SUN没有提供Java语音API的实现工具,常用 的是IBM公司开发的语音软件FreeTTS. 下载地址: prdownloads.sourceforge.net/freetts/freetts-1_1_2.tar.gz?download
8.5JAR文件--Java存档文件 操纵JAR文件的工具是jar程序 语法:jar option File1,File2,…... options: c--创建一个新的空存档文件并且把文件添加至其中 f--用第二个命令行参数作JAR文件名 v--生成详细说明 例:jar cvf jarTest.jar *.class msn.jpg
<applet code=DrawImage.class ARCHIVE=“jarTest.jar” height=300 width=230> </applet> 指明文件所在位置 set classpath=.;c:\1000;e:\newjava\ch8\ jarTest.jar; c:\jdk14\lib\rt.jar