荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: 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软件 网络书店