荔园在线
荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀
[回到开始]
[上一篇][下一篇]
发信人: Peter (小飞侠), 信区: Program
标 题: Applet和Application的混合编程
发信站: BBS 荔园晨风站 (Wed Jan 27 17:44:23 1999), 转信
Applet和Application是两种典型的Java程序类型,且各具特色。Ap
plet是一种专门用于嵌入HTML文档中,并在浏览器上运行的Java小程
序。基于对网络安全的考虑,Applet的操作权限有许多限制,如不能访
问本地的文件系统,或者通过Applet去访问网络上其它节点的文件系
统等等。而Application则是一种用Java语言编写的应用程序,它与用
其它语言编写的应用程序从功能上和使用范围上没有什么不同。Appl
et的执行需要装入到AppletViewer或能运行A pplet的浏览器上;Appl
ication则需要用Java解释器来解释执行。那么,能不能提供一种Jav
a程序,使它兼有Applet和Application的特征既能像Application那样
用java来解释执行,也能像Applet那样装载到AppletViewer上来执行?
答案是肯定的。下面我们就一起来探讨一下怎样建立这样的程序。
Applet和Application的差别及混合编程的关键
从程序形式上看,Applet和Application有所差异。Applet的典型
形式如下:
public classAppletClassName extends Applet implements Ru
nnable
{
public void init(){......}
//其它的方法和参数定义
public void start(){......}
public void run(){......}
public void stop(){......}
public void exit(){......}
}
而Application的典型程序形式为(基于AWT编程):
public class ApplicationClassName extends Frame
{
ApplicationClassName(){......}
//这是一个对象的构造函数
public static void main(String args[])
{
FrameApplicationClassObject=new ApplicationClassName();
resize(200,400)
show();
}
//其它的方法和参数定义。
}
从程序的具体内容来看,无论是Applet还是Application,都是一
个公共类。而且,为了能使AppletViewer装载这个类,它必须是类Appl
et的子类(必须由类Applet继承而来);为了使j ava能开始解释执行这
个Application,它就必须含有如下说明的方法:
public static void main(String args[]){......}
因此,Application和Applet的最大不同是:Application有一个ma
in(String arg[])的方法,它用于声明该Application对象,并在该对
象生成以后,调用方法show()来显示Applicati on的结果;而Applet则
由Applet继承而来,它用init()方法负责对象的初始化,在初始化后按
Start()run()stop()exit()的次序执行Applet程序。因此要使
一个Java程序兼有App lication和Applet的特点,则需要在对象中同
时包含这两个方法,并且它需要由java.applet .Applet继承而来。因
此该对象的形式如下:
public class AppletApplication extends Applet
{
public void init(){……}
……………
public static void main(String args[]) {………}
}
在以前典型的Application中,main方法一般只是声明该类的对象
,并调用方法show()来显示用户窗口。但现在就不是那么简单了。因
为,不能调用show()来显示Applet——Applet 必须被置于一个frame
当中;并且,一旦Applet被放入frame当中,init()方法就需要被调用。
在AWT编程当中,含有main()方法的类由frame类继承而来,也即该类已
经被放入到frame之中,为了程序能在AppletViewer下运行,init()方
法的调用应该在show()以前。为了解决这个问题,需要引入一个新的
辅助类,它用于产生一个frame,把用户定义的applet放入其中,并使对
方法init()的调用在show()之前:
public class AppletFrame extends Frame
{
AppletFrame(Applet applet,int x,int y)
{
setTitle(applet.gerClass().getName());
//取当前Applet类的类名,如在本程序中,就是取类AppletApplic
ation的名字
resize(x,y);
//x,y为需要显示的Applet窗口的大小
add("Center",applet)
//把Applet窗口放到屏幕的正中间
applet.init();
show();
applet.start();
}
punlic boolean handleEvent(Event evt)
//在frame中,这个方法是必须有的,否则应用程序窗口将不能
被关闭
{
if(evt.id==Event.WINDOWS_DESTROY)
{System.exit(0);}
return Super.handleEvent(evt);
}
}
改写main()方法:
public class AppletApplication extends Applet
{
......
public static void main (String args[])
{
new AppletFrame(new AppletApplication(),600,400);
}
举例
现在,从程序结构上来说,这个程序兼有Application和Applet的
特点;从功能上,它既可以装载到AppletViewer上运行,也可以用java
来解释执行。有兴趣的读者可以编程来验证一下。下面就是用上述思
想编写的一个简单例子。
import java.applet.Applet;
import java.awt.Event;
import java.awt.Frame;
import java.awt.Label;
public class StarterCombined extends Applet{
private Label label;
public static void main(String args[]){
StarterCombinedFrame app=new StarterCombinedFrame("Star
ter Application");
app.resize(300,100);
app.show ();
System.out.println("StarterCombinedFrame::main()");
}
public void init(){
System.out.println("Applet::init()");
}
public void start(){
System.out.println("Applet::start()")
label=new Label("Starter");
add(label);
}
public void stop(){
System.out.println("Applet::stop()");
remove(label);
}
public void destroy(){
System.out.println("Applet::destroy()");
}
}
class StarterCombinedFrame extends Frame{
public StarterCombinedFrame(String frameTitle){
super(frameTitle);
StarterCombined applet=new StarterCombined();
applet.start();
add ("Center",applet);
}
public boolean handleEvent(Event event){
if(event.id==Event.WINDOWS_DESTROY)
System.exit(0);
return false;
}
}
--
※ 来源:.BBS 荔园晨风站 bbs.szu.edu.cn.[FROM: 192.168.1.3]
[回到开始]
[上一篇][下一篇]
荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店