选择显示字体大小

具有 applet & application 双重身份的类

作者: 边城狂人 (2002-4-2)
出处: 边城客栈

--------------------------------------------

  applet(小应用程序) 就用于网页中,美化和丰富网页的内容,由浏览器管理其生命周期(life cycle), 即生成(new)、初始化(init)、运行(start)、停止(stop)和销毁(destroy)等。写 applet,必须从 java.applet.applet 类继承,并根据需要重载 init()(applet 被读入系统时由浏览器调用,只调用一次,初始化 appet), start()(浏览器运行 applet 时调用), stop()(浏览器停止 applet 时调用), destroy()(applet 被销毁时调用,在这里释放一些需要释放的资源) 等方法。如下例是一个简单的、什么都不做的 applet

/**
* @(#) myapplet.java
* @author fancy
*/

import java.applet.*;

public class myapplet extends applet { // ! 必须从 java.applet.applet 继承 !
}
  application(应用程序) 是能使用 java 命令运行的 java 应用程序,它以一个特定的 main() 方法为入口,自行管理其生命周期。写一个 application 则必须要实现上述特定的 main() 方法。该 main() 方法必须是 public(公有)、static(静态)、void(无返回值) 的,而且必须要求一个 string[] 类型的参数。如下例是一个简单的,什么都不做的 application:

/**
* @(#) myapplication.java
* @author fancy
*/

public class myapplication {

public static void main(string[] args) { // ! 必须要有一个 pulic static void main(string[]) 方法 !
}

}
  简单的介绍过 applet 和 application 的要点之后,下面我们要进入主题了??写一个类,它即是 applet 又是 application。

  根据上述 applet 和 application 的特点和要求,这个类必须从 java.applet.applet 继承,且实现了 public static void main(string[]) 方法,如下例,它同样什么都不做:

/**
* @(#) myappletapplication.java
* @author fancy
*/

import java.applet.*;

public class myappletapplication extends applet { // ! ① 从 java.applet.applet 继承 !

public static void main(string[] args) { // ! ② 实现了 public static void main(string[]) 方法 !
}

}
  上面说的各类都是什么都不做的,如果要做什么又该怎么办呢?

  由于 applet 是浏览器管理其生命周期,即由浏览器生成 applet 实例和调用它从 java.applet.applet 类继承的 init()、start()、stop() 和 destroy() 等方法;而 application 是由自己管理生命周期,需要自己生成实例并调用相关方法。所以我们的 myappletapplication 类必须根据需要实现 init()、start()、stop() 和 destroy() 等方法,以便浏览器对其生命周期进行管理;同时,也必须在那个特定的 main() 方法中生成该类的实例(对象),并调用用于管理期生命周期的相关方法。如

/**
* @(#) myappletapplication.java
* @author fancy
*/

import java.applet.*;

public class myappletapplication extends applet {

public static void main(string[] args) {
myappletapplication app = new yappletapplication(); // ①生成实例
......
app.init(); // ② 初始化
......
app.start(); // ③ 开始运行
......
app.stop(); // ④ 停止运行
......
app.destroy(); // ⑤ 销毁
......
}

}
  其实做到这些还是不够的,因为一个 applet 放入网页中,就由浏览器负责对其进行绘制(显示),而在应用程序中,则需要我们使用相关部件对其进行绘制。值得庆幸的是,java.applet.appletjava.awt.compo.net 继承,它就是一个 awt 部件(component),我们只需要将它加入到一个 frame 或者 window 中即可实现对它的绘制。至此,所有的问题都已经解决了,请看下例:

/**
* @(#) myappletapplication.java
* @author fancy
*/

import java.applet.*;
import java.awt.*;
import java.awt.event.*;

public class myappletapplication extends applet { // 从 java.applet.applet 继承

private list list;

public void init() { // 初始化
list = new list();
add(list);
list.additem("initializing");
system.out.println("initializing");
}

public void start() { // 开始运行时
list.additem("starting");
system.out.println("starting");
}

public void stop() { // 结束运行时
list.additem("stopping"); // 这句看不到效果
system.out.println("stopping");
}

public void destroy() { // 销毁时
list.additem("destroying"); // 这句看不到效果
system.out.println("destroying");
}

public static void main(string[] args) {
myappletapplication app = new myappletapplication();
app.init();
app.start();
frame frame = new frame();
frame.add(app);
frame.addwindowlistener(new mywindowlistener(app));
frame.setsize(200, 150);
frame.show();
}

public static class mywindowlistener extends windowadapter {

applet applet;

public mywindowlistener(applet applet) {
this.applet = applet;
}

public void windowclosing(windowevent event) {
applet.stop();
applet.destroy();
system.exit(0);
}

}

}
  备注:上例中,在 stop() 和 destroy() 中为 list 添加项是看不到效果的,因为此时 applet 已经停止或者正在销毁,它作为 application 身份时也一样。另外,所有的 system.out.println() 语句在上例作为 applet 时也是看不到的。

注意:并不是所有的小应用程序都可能同时也是应用程序,因为有一些在小应用程序中的功能不能用于应用程序中,如 applet.getcodebase()、applet.getdocumentbase() 等在 application 中应用时就会抛异常。而一些在 application 中可以使用的内容,由于安全问题,也不能在 applet 中使用,毕竟 applet 是要发布在网上的,需要更高的安全性。


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons