2023年11月25日发(作者:)
JavaApplet编程和实例
Java最初奉献给世⼈的就是Applet,随即它吸引了全世界的⽬光,Applet运⾏于浏览器上,可以⽣成⽣动美丽的页⾯,进⾏友好的⼈机交
互,同时还能处理图像、声⾳、动画等多媒体数据。Applet在Java的成长过程中起到不可估量的作⽤,到今天Applet依然是Java程序设计
最吸引的⼈之⼀。在本期专题中我将向读者介绍Applet编程的⼀些技巧。
Java Applet 是⽤Java 语⾔编写的⼀些⼩应⽤程序,这些程序是直接嵌⼊到页⾯中,由⽀持Java的浏览器(IE 或 Nescape)解释执⾏能
够产⽣特殊效果的程序。它可以⼤⼤提⾼Web页⾯的交互能⼒和动态执⾏能⼒。包含Applet的⽹页被称为Java-powered页,可以称其为
Java⽀持的⽹页。
当⽤户访问这样的⽹页时,Applet被下载到⽤户的计算机上执⾏,但前提是⽤户使⽤的是⽀持Java的⽹络浏览器。由于Applet是在⽤户的
{
ring("Hello World!",5,35);
}
}
保存上述程序在C:/ghq/⽂件⾥。
(2)编译Applet
编译源⽂件可使⽤如下JDK命令:
C:/ghq/>javac <Enter>
注意:如果编写的源程序违反了Java编程语⾔的语法规则,Java编译器将在屏幕上显⽰语法错误提⽰信息。源⽂件中必须不含任何语
法错误,Java编译器才能成功地把源程序转换为appletviewer和浏览器能够执⾏的字节码程序。
成功地编译Java applet之后⽣成响应的字节码⽂件的⽂件。⽤资源管理器或DIR命令列出⽬录列表,将会发现⽬录
C:/ghq中多了⼀个名为的⽂件。
(3)创建HTML⽂件
在运⾏创建的 之前,还需创建⼀个HTML⽂件,appletviewer或浏览器将通过该⽂件访问创建的Applet。为运⾏
, 需要创建包含如下HTML语句的名为的⽂件。
<HTML>
<TITLE>HelloWorld! Applet</TITLE>
<APPLET
CODE=""
WIDTH=200
}
Applet类的构造函数只有⼀种,即:public Applet()
Applet实现了很多基本的⽅法,下⾯列出了Applet类中常⽤⽅法和⽤途。
public final void setStub(AppletStub stub)
//设置Applet的是Java和C之间转换参数并返回值的代码位,它是由系统⾃动设定的。
public boolean isActive();// 判断⼀个Applet是否处于活动状态。
public URL getDocumentBase();// 检索表⽰该Applet运⾏的⽂件⽬录的对象。
public URL getCodeBase();// 获取该Applet 代码的URL地址。
public String getParameter(String name);// 获取该Applet 由name指定参数的值。
public AppletContext getAppletContext();// 返回浏览器或⼩应⽤程序观察器。
public void resize(int width,int height);// 调整Applet运⾏的窗⼝尺⼨。
public void resize(Dimension d);// 调整Applet运⾏的窗⼝尺⼨。
public void showStatus(String msg);// 在浏览器的状态条中显⽰指定的信息。
public Image getImage(URL url); // 按url指定的地址装⼊图象。
public Image getImage(URL url,String name);// 按url指定的地址和⽂件名加载图像。
public AudioClip getAudioClip(URL url);// 按url指定的地址获取声⾳⽂件。
public AudioClip getAudioClip(URL url, String name);// 按url指定的地址和⽂件名获取声⾳。
public String getAppletInfo();// 返回Applet应⽤有关的作者、版本和版权⽅⾯的信息;
public String[][] getParameterInfo();
// 返回描述Applet参数的字符串数组,该数组通常包含三个字符串: 参数名、该参数所需值的类型和该参数的说明。
public void play(URL url);// 加载并播放⼀个url指定的⾳频剪辑。
public void destroy();//撤消Applet及其所占⽤的资源。若该Applet是活动的,则先终⽌该Applet的运⾏。
(1) Applet运⾏状态控制基本⽅法
Applet类中的四种基本⽅法⽤来控制其运⾏状态:init()、start()、stop()、destroy()
init()⽅法
这个⽅法主要是为Applet的正常运⾏做⼀些初始化⼯作。当⼀个Applet被系统调⽤时,系统⾸先调⽤的就是该⽅法。通常可以在该⽅
法中完成从⽹页向Applet传递参数,添加⽤户界⾯的基本组件等操作。
start()⽅法
系统在调⽤完init()⽅法之后,将⾃动调⽤start()⽅法。⽽且,每当⽤户离开包含该Applet的主页后⼜再返回时,系统⼜会再执⾏⼀遍
start()⽅法。这就意味着start()⽅法可以被多次执⾏,⽽不像init()⽅法。因此,可把只希望执⾏⼀遍的代码放在init()⽅法中。可以在
start()⽅法中开始⼀个线程,如继续⼀个动画、声⾳等。
stop()⽅法
这个⽅法在⽤户离开Applet所在页⾯时执⾏,因此,它也是可以被多次执⾏的。它使你可以在⽤户并不注意Applet的时候,停⽌⼀些
耗⽤系统资源的⼯作以免影响系统的运⾏速度,且并不需要⼈为地去调⽤该⽅法。如果Applet中不包含动画、声⾳等程序,通常也不必实现
该⽅法。
destroy()⽅法
与对象的finalize()⽅法不同,Java在浏览器关闭的时候才调⽤该⽅法。Applet是嵌在HTML⽂件中的,所以destroty()⽅法不关⼼何
时Applet被关闭,它在浏览器关闭的时候⾃动执⾏。在destroy()⽅法中⼀般可以要求收回占⽤的⾮内存独⽴资源。(如果在Applet仍在运⾏
时浏览器被关闭,系统将先执⾏stop()⽅法,再执⾏destroy()⽅法。
(2) Applet应⽤的有关参数说明
利⽤Applet来接收从HTML中传递过来的参数,下⾯对这些参数作⼀简单说明:
* CODE标志
* CODE标志
显⽰⽂字是Java中最基本的功能,使⽤⾮常简单的⽅式来⽀持⽂字的显⽰,只要使⽤类Graphics中的drawString()函数就能实现。我们来
看最简单的ghq例⼦:
//
import .*;
import .*;
public class ghq extends Applet
{
String text="ghq is a student!";
public void paint(Graphics g)
{
ring(text,20,20);
} //在坐标20,20 处显⽰text的内容
}
这是最基本的Java Applet,运⾏的时候仅显⽰“ghq is a student!”。Java⽀持Unicode,因此中⽂也能在Java中很好地显⽰出
我们再来看对键盘响应的例⼦:
//
import .*;
import .*;
public class Keyboard extends Applet
{
String text="";
public void paint(Graphics g)
{
显⽰图像()
//源程序清单
import .*;
import .*;
public class ShowImage extends Applet
Image picure; //定义类型为Image的成员变量
public void init()
{
picture=getImage(getCodeBase(),""); //装载图像
}
public void paint(Graphics g)
{
age(picture,0,0,this); //显⽰图像
}
}
为此,HTML⽂件中有关Applet的语句如下:
<HTML>
<TITLE>Show Image Applet</TITLE>
<APPLET
CODE="" //class⽂件名为
WIDTH=600
HEIGHT=400>
</APPLET>
</HTML>
编译之后运⾏该Applet时,图像不是⼀⽓呵成的。这是因为程序不是drawImage⽅法返回之前把图像完整地装⼊并显⽰的。与此相
反,drawImage⽅法创建了⼀个线程,该线程与Applet的原有执⾏线程并发执⾏,它⼀边装⼊⼀边显⽰,从⽽产⽣了这种不连续现象。为
了提⾼显⽰效果。许多Applet都采⽤图像双缓冲技术,即先把图像完整地装⼊内存然后再显⽰在屏幕上,这样可使图像的显⽰⼀⽓呵成。
双缓冲图像
为了提⾼图像的显⽰效果应采⽤双缓冲技术。⾸先把图像装⼊内存,然后再显⽰在Applet窗⼝中。
使⽤双缓冲图像技术例⼦()
//源程序清单
import .*;
import java. applet.*;
public class BackgroundImage extends Applet //继承Applet
{
age(picture,0,0,null); //显⽰图像,第四参数为null,不是this
showStatus("Done");
}
else
showStatus("Loading image");
}
public boolean imageUpdate(Image img,int infoflags,int x,int y,int w,int h)
{
[⽂章导读]使⽤Applet播放声⾳时需⾸先定义AudioClip对象,GetAudioClip⽅法能把声⾳赋予AudioClip对象使⽤Applet播放声⾳时需⾸
先定义AudioClip对象,GetAudioClip⽅法能把声⾳赋予AudioClip对象,如果仅想把声⾳播放⼀遍,应调⽤AudioClip类的play⽅法,如
果想循环把声⾳剪辑,应选⽤AudioClip类的loop⽅法。
(1) 播放声⾳⽂件
图像格式各种各样,如BMP、GIF和JPEG等。声⾳⽂件也⼀样,WAV和AU是最常⽤的两种声⾳⽂件。⽬前Java仅⽀持AU⽂件,但
Windows环境下常⽤的却是WAV⽂件,所以最好能有⼀个可把WAV⽂件转换为AU⽂件的⼯具。
* 播放声⾳的AudioClip类
AudioClip类⽤来在Java Applet内播放声⾳,该类在包中有定义。
下⾯演⽰了如何利⽤AudioClip类播放声⾳。
装⼊⼀个名为的声⾳⽂件并播放()
//源程序清单
import .*;
import .*
public class SoundDemo extends Applet
{
public void paint(Graphics g)
{
AudioClip audioClip=getAudioClip(getCodeBase(),””);
//创建AudioClip对象并⽤//getAudioClip⽅法将其初始化。
ring("Sound Demo! ",5,15);
();//使⽤AudioClip类的loop⽅法循环播放
}
}
[⽂章导读]在Java中实现动画有很多种办法,但它们实现的基本原理是⼀样的,即在屏幕上画出⼀系列的帧来造成运动的感觉
Java 不仅提供了对图形、图像的⽀持,还允许⽤户实现连续的图像播放,即动画技术。Java 动画的实现,⾸先⽤ 包中的
Graphics 类的drawImage()⽅法在屏幕上画出图像,然后通过定义⼀个线程,让该线程睡眠⼀段时间,然后再切换成另外⼀幅图像;如此
循环,在屏幕上画出⼀系列的帧来造成运动的感觉,从⽽达到显⽰动画的⽬的。
为了每秒钟多次更新屏幕,必须创建⼀个线程来实现动画的循环,这个循环要跟踪当前帧并响应周期性的屏幕更新要求;实现线程的⽅法有
两种,可以创建⼀个类Thread 的派⽣类,或附和在⼀个Runnable 的界⾯上。
* 动画技巧
在编写动画过程时,遇到最常见的问题是屏幕会出现闪烁现象。闪烁有两个原因:⼀是绘制每⼀帧花费的时间太长(因为重绘时要求的
String lastdate; // 保存当前时间的字符串
Font clockFaceFont; //设置显⽰时钟⾥⾯的数字的字体
Date currentDate; // 显⽰当前时间
Color handColor; // ⽤于显⽰时针、分针和表盘的颜⾊
Color numberColor; // ⽤于显⽰秒针和数字的颜⾊
public void init()
{
int x,y;
lastxs = lastys = lastxm = lastym = lastxh = lastyh = 0;
formatter = new SimpleDateFormat ("yyyy EEE MMM dd hh:mm:ss ");
currentDate = new Date();
lastdate = (currentDate);
clockFaceFont = new Font("Serif", , 14);
handColor = ;
numberColor = ay;
try {
setBackground(new Color(nt(getParameter("bgcolor"),16)));
} catch (Exception E) { }
try {
handColor = new Color(nt(getParameter("fgcolor1"),16));
}
else {
d=d+2*(x-y)+5;
x++;
y--;
}
plotpoints(x0,y0,x,y,g);
}
}
public void paint(Graphics g)
{
or(numberColor);
ring("9",xcenter-45,ycenter+3);
ring("3",xcenter+40,ycenter+3);
ring("12",xcenter-5,ycenter-37);
ring("6",xcenter-3,ycenter+45);
// 如果必要的话抹去然后重画
or(getBackground());
if (xs != lastxs || ys != lastys) {
ne(xcenter, ycenter, lastxs, lastys);
ring(lastdate, 5, 125);
}
}
//注意:这⾥重写了update()⽅法,只是调⽤了paint()⽅法来消除闪烁现象
public void update(Graphics g)
{
paint(g);
}
}
下⾯是运⾏该Applet 需要的 的内容
<HTML>
<HEAD>
<TITLE>⼀个时钟的例⼦</TITLE>
</HEAD>
<BODY>
<hr>
<applet codebase="." ALIGN=MIDDLE code="" width=200 height=150>
</applet>
</BODY>
</HTML>
[⽂章导读]在有些情况下,可能需要在发⽣某事件时伴之以声⾳,⼪其是在Applet 中装载图像的同时播放声⾳,这样将⼤⼤地丰富Applet的
内容
在有些情况下,可能需要在发⽣某事件时伴之以声⾳,⼪其是在Applet 中装载图像的同时播放声⾳,这样将⼤⼤地丰富Applet的内容。协调
使⽤图像的声⾳是⼗分重要的。
声⾳和图像的协调()
//源程序清单
import .*;
import .*;
import .*;
public class Appletl extends Applet implements Runnable
{
AudioClip audioClip;
Thread ShapeThread=null;
Random RandomNumber=new Random( );
Color ImageColor;
public void init( )
{
audioClip=getAudioClip(getCodeBase( ), "");// 创建⼀个AudioClip对象
}
case 0: ImageColor=;
break;
case 1: ImageColor=;
break;
case 2: ImageColor=;
break;
case3: ImageColor=a;
break;
case4: ImageColor=;
break;
default: ImageColor=;
}
try
{
(300); //线程睡眠
}
catch(InterruptedException e)
{
//忽略异常
repaint();
}
}
public void paint(Graphics g)
{
or(ImageColor);
(); //播放声⾳
switch(t(2)) //获取随机数与2整除的余数
{
case0:ct(25,25,200,200); //添充⼀个矩形
break;
default:al(25,25,200,200); //添充⼀个椭圆
break;
}
}
}
该Applet的声⾳处理⾮常简单。它⾸先创建⼀个AudioClip对象并⽤getAudioClip把声⾳⽂件赋予该对象,然后⽤AudioClip类的play⽅
法播放声⾳。该Applet使⽤Random对象产⽣随机数。它⾸先根据随机数确定颜⾊;然后在paint内根据随机数确定画圆还是画⽅。Random
类的nexsInt函数返回⼀个随机整数(int型)。该Applet把随机数转换为⼀个0~4之间的值(在run函数内)和⼀个0~1之间的值(在paint函数内)。
需把如下的HTML语句放⼊⽂件,为运⾏该Appletl做准备。
<HTML>
<TITLE>Applet</TITLE>
<APPLET CODE="" WIDTH=300 HEIGHT=300>
</APPLET>
</HTML>
编译并运⾏该Appletl,屏幕上将显⽰出⼀个Applet窗⼝,窗⼝中不
发布评论