Java Applet 笔记

来源:互联网 发布:户外帐篷知乎 编辑:程序博客网 时间:2024/05/14 16:04

一、概念及运行环境。

Java Applet 是可以运行在浏览器中的小应用程序。与 Applicantion的不同, Applet 小程序是在浏览器中执行的,需要在 HTML 中声明运行。声明方式是通过<applet></applet>标签,并且指出 applet 程序的 .class 文件的 URL 。当浏览器访问嵌入 Applet 的网页时,Applet 的 .class 文件会从服务器端下载到浏览器端,浏览器启动一个 Java 虚拟机来运行 Applet 程序。

HTML 中的 <applet></applet>标签需要包括编译后的 .class 文件以及小程序在网页上显示的方式。

例:<applet code="xxxx.class" width="200" height="200"></applet>

二、如何建立一个 Applet

1:必须继承 java.applet.Applet 类。

2:Swing 提供了 java.applet.JApplet 类,也可以继承该类来实现自己的 Applet 程序,但 JApplet 类必须使用 Swing 组件来构建它的 GUI (图形用户界面)。

3:最好使用 web 服务器来测试 Applet 。不推荐在本地测试 Applet , Java 控制面板的安全级别设为高或非常高的时候 Applet 会被阻止。

接下来我们来构建一个 Applet 的 Helloworld 程序。

import java.applet.Applet;

import java.awt.Graphices;

public class HelloApplet extends Applet{

public void print(Graphics gra){

gra.drowString("Helloworld!" ,25,25);

}

}

继承 JApplet 类:

import javax.swing.JApplet;

import javax.swing.SwingUtilities;

import javax.swing.JLabel;

public class HelloWorld extends JApplet{

public void init(){

try{

SwingUtilities invokeAndWait(new Runnable(){

public void run(){

JLabel lbl=new JLabel("Hello World!");

add(lbl);

}});

}catch(Exception e){

System.err.println("createGUI did not complete successfully");

}

}

}

三、Applet 的时间周期函数

1:init() 函数

init() 函数为初始化函数,在整个 Applet 生命周期中只执行一次。其中代码执行一些初始化的操作且不宜太长,以至于拖慢 Applet 的加载时间。

2:start() 函数

start() 函数在 init() 函数之后执行,启动 Applet 运行。最好从 start() 函数中快速返回。若是需要执行复杂的运算,推荐为此开启一个线程。该函数可被执行多次,在浏览器的状态改变调用 stop() 函数后,再回到 Applet 程序时 start() 便又会被执行。

3:stop()函数

该函数会让 Applet 暂停执行。释放一些资源。若是用户暂时不需要 Applet 运行,该方法会被执行。待用户返回, start() 方法会执行,重新执行 Applet 。

4:destory()函数

一般不需要重写此函数,因为 stop() 函数会执行所有停止 Applet 所必须的操作。destory() 函数用来释放额外的资源。本函数中的代码尽量简短, JVM 不会等待此函数的长时间执行。有可能在函数还未执行完的时候 JVM 便已经执行退出了。

用户在离开本页面,刷新,或是退出浏览器都会让 Applet 调用 stop() 和 destory() 函数。

四、显示图像或音频(寻找并加载数据文件)

Applet 需要通过 URL 来访问指定的资源。URL 并不完全地指出文件的位置,所以一般使用 getCodeBase() 方法或是 getDocumentBase() 方法来获取 当前Applet 的URL ,或是Applet 所在 HTML 的URL。

注意:出于安全,浏览器限制不受信任的 Applet 对 URL 的使用。例如,很多浏览器限制 Applet 用“..”来访问指向 code base 或 document base 上层的资源。applet 也不能读取本地文件(除了 applet 代码所在的文件夹)。

建立 Image 对象,使用指定文件夹下的图像,可以使用如下代码:

Image image =getImage(getCodeBase(),"imgDir/a.gif");

使用音频:

AudioClip audio=getAudopClip(getCodeBase(),"b.au");

getCodeBase() 一般在 applet 访问资源的时候用,getDocumentBase() 一般在使用参数的时候使用。

获得指定的参数用 Applet.getParameter() 函数 。

下面是一个展示图片并且播放音频的例子:

public class Demo extends Applet{

private AudioClip audio;

private Image img;

public void init(){

img=getImage(getCodeBase(),"img.jpg");

audio=getAudioClip(getCodeBase(),"sing.au");

}

public void start(){

audio.play()//只播放一次

//audio.loop()循环播放

}

public void print(Graphices g){

g.drawImage(img,0,0,200,100,this);

}

public void stop(){

audio.stop();

}

}

特注:变成小白,c++和java搞混了,一直都不知道函数和方法有什么区别,但在java中一直用“方法”这个词,这里用了函数。写完了才反应过来。请多包涵。学了java有一段时间,但由于没有用到applet的地方,所以知道的很少,今天学了一些,都整理在这里了。一直都理解不了applet这个东东。。。。惭愧。


0 0
原创粉丝点击