applet 是一个在Web浏览器中运行的Java程序. applet可以是一个功能齐全的Java应用程序,因为它可以使用整个Java API.
applet和独立的Java应用程序之间存在一些重要的区别,包括以下内容;
applet是一个扩展java.applet.Applet类的Java类.
不会在applet上调用main()方法,applet类也不会定义main().
Applet旨在嵌入HTML页面.
当用户查看包含applet的HTML页面时,applet的代码将被下载到用户的计算机.
查看小程序需要JVM. JVM可以是Web浏览器的插件,也可以是单独的运行时环境.
用户计算机上的JVM创建applet类的实例并在applet的生命周期内调用各种方法.
Applet具有由Web浏览器强制执行的严格安全规则. applet的安全性通常被称为沙箱安全性,将applet与在沙箱中玩的孩子进行比较,并且必须遵循各种规则.
其他applet所需的类可以在单个Java Archive(JAR)文件中下载.
Applet的生命周期
Applet类中的四个方法为您提供构建任何严重applet的框架 :
init : 此方法适用于applet所需的初始化.在applet标签内的param标签处理完毕后调用.
start : 浏览器调用init方法后会自动调用此方法.每当用户在离开其他页面后返回包含applet的页面时,也会调用它.
停止 : 当用户离开applet所在的页面时,将自动调用此方法.因此,它可以在同一个小程序中重复调用.
destroy : 只有在浏览器正常关闭时才会调用此方法.因为applet意图存在于HTML页面上,所以在用户离开包含applet的页面后,通常不应该留下资源.
油漆 : 在start()方法之后立即调用,以及applet需要在浏览器中重新绘制自己的任何时候. paint()方法实际上是从java.awt继承的.
一个"Hello,World"Applet
以下是一个名为HelloWorldApplet.java的简单小程序 :
import java.applet.*;import java.awt.*;public class HelloWorldApplet extends Applet { public void paint (Graphics g) { g.drawString ("Hello World", 25, 50); }}
这些import语句将类带入applet类的范围 :
java.applet.Applet
java.awt.Graphics
如果没有这些import语句,Java编译器将无法识别applet类引用的Applet和Graphics类.
Applet类
每个applet都是 java.applet.Applet类的扩展.基础Applet类提供派生Applet类可以调用以从浏览器上下文获取信息和服务的方法.
这些包括执行以下和减去的方法;
获取applet参数
获取包含applet的HTML文件的网络位置
获取applet类目录的网络位置
在浏览器中打印状态消息
获取图像
获取音频片段
播放音频片段
调整小程序大小
此外,Applet类提供了一个界面,通过该界面,查看器或浏览器可以获取有关applet的信息并控制applet的执行.观众可以 :
请求有关applet的作者,版本和版权的信息
请求小程序识别的参数说明
初始化小程序
销毁小程序
启动applet的执行
停止applet的执行
Applet类提供了每种方法的默认实现.可以根据需要覆盖这些实现.
"Hello,World"applet已经完成.覆盖的唯一方法是paint方法.
调用Applet
可以通过在HTML文件中嵌入指令并查看文件来调用applet通过applet查看器或支持Java的浏览器.
< applet> tag是在HTML文件中嵌入applet的基础.以下示例调用"Hello,World"小程序 :
The Hello, World Applet
注意 : 您可以参考 HTML Applet标记,以了解有关从HTML调用applet的更多信息.
< applet>的代码属性标签是必需的.它指定要运行的Applet类.还需要宽度和高度来指定运行applet的面板的初始大小.必须使用关闭applet指令标签.
如果applet接受参数,可以通过添加< param>来为参数传递值. < applet>之间的标签和.浏览器忽略applet标记之间的文本和其他标记.
不支持Java的浏览器不处理< applet>和.因此,在不支持Java的浏览器中可以看到标记之间出现的与applet无关的任何内容.
查看器或浏览器在以下位置查找已编译的Java代码.该文件.要另行指定,请使用< applet>的codebase属性.标签显示和减去;
如果applet位于默认包以外的包中,则必须在code属性中使用句点字符(.)指定包装包以分隔包/class组件.例如 :
获取Applet参数
以下示例演示如何使applet响应文档中指定的设置参数.此小程序显示黑色和第二种颜色的棋盘图案.
第二种颜色和每个正方形的大小可以指定为文档中小程序的参数.
CheckerApplet在init()方法中获取其参数.它也可以在paint()方法中获取其参数.但是,在applet的开头获取值并保存一次,而不是每次刷新都是方便有效的.
applet查看器或浏览器调用init()方法它运行的每个小程序.加载小程序后,查看器立即调用init()一次. (实现Applet.init()不执行任何操作.)重写默认实现以插入自定义初始化代码.
Applet.getParameter()方法获取给定参数名称的参数(参数的值总是一个字符串).如果值是数字或其他非字符数据,则必须解析字符串.
以下是CheckerApplet.java的骨架 :
import java.applet.*;import java.awt.*;public class CheckerApplet extends Applet { int squareSize = 50; // initialized to default size public void init() {} private void parseSquareSize (String param) {} private Color parseColor (String param) {} public void paint (Graphics g) {}}
这是CheckerApplet的init()和私有parseSquareSize()方法 :
public void init () { String squareSizeParam = getParameter ("squareSize"); parseSquareSize (squareSizeParam); String colorParam = getParameter ("color"); Color fg = parseColor (colorParam); setBackground (Color.black); setForeground (fg);}private void parseSquareSize (String param) { if (param == null) return; try { squareSize = Integer.parseInt (param); } catch (Exception e) { // Let default value remain }}
applet调用parseSquareSize()来解析squareSize参数. parseSquareSize()调用库方法Integer.parseInt(),它解析字符串并返回一个整数. Integer.parseInt()在其参数无效时抛出异常.
因此,parseSquareSize()捕获异常,而不是允许applet在输入错误时失败.
applet调用parseColor()将color参数解析为Color值. parseColor()执行一系列字符串比较,以将参数值与预定义颜色的名称相匹配.您需要实现这些方法才能使此applet正常工作.
指定Applet参数
以下是嵌入了CheckerApplet的HTML文件示例在里面. HTML文件通过< param>指定applet的两个参数.标签.
Checkerboard Applet
注意 : 参数名称不区分大小写.
应用程序转换为小程序
转换图形Java应用程序(即使用的应用程序)很容易AWT,你可以从Java程序启动器开始)到一个可以嵌入网页的applet中.
以下是将应用程序转换为applet的具体步骤./p>
创建一个带有相应标签的HTML页面以加载applet代码.
提供JApplet类的子类.将此课程公之于众.否则,无法加载小程序.
消除应用程序中的main方法.不要为应用程序构造框架窗口.您的应用程序将显示在浏览器中.
将任何初始化代码从框架窗口构造函数移动到applet的init方法.您不需要显式构造applet对象.浏览器为您实例化并调用init方法.
删除对setSize的调用;对于applet,使用HTML文件中的width和height参数进行大小调整.
删除对setDefaultCloseOperation的调用.小程序无法关闭;它会在浏览器退出时终止.
如果应用程序调用setTitle,则取消对该方法的调用.小程序不能有标题栏. (当然,您可以使用HTML标题标记对网页本身进行标题.)
不要调用setVisible(true).小程序会自动显示.
事件处理
小程序继承一组事件处理Container类中的方法. Container类定义了几个方法,比如processKeyEvent和processMouseEvent,用于处理特定类型的事件,然后是一个名为processEvent的全能方法.
为了对事件做出反应, applet必须覆盖适当的特定于事件的方法.
import java.awt.event.MouseListener;import java.awt.event.MouseEvent;import java.applet.Applet;import java.awt.Graphics;public class ExampleEventHandling extends Applet implements MouseListener { StringBuffer strBuffer; public void init() { addMouseListener(this); strBuffer = new StringBuffer(); addItem("initializing the apple "); } public void start() { addItem("starting the applet "); } public void stop() { addItem("stopping the applet "); } public void destroy() { addItem("unloading the applet"); } void addItem(String word) { System.out.println(word); strBuffer.append(word); repaint(); } public void paint(Graphics g) { // Draw a Rectangle around the applet's display area. g.drawRect(0, 0, getWidth() - 1, getHeight() - 1); // display the string inside the rectangle. g.drawString(strBuffer.toString(), 10, 20); } public void mouseEntered(MouseEvent event) { } public void mouseExited(MouseEvent event) { } public void mousePressed(MouseEvent event) { } public void mouseReleased(MouseEvent event) { } public void mouseClicked(MouseEvent event) { addItem("mouse clicked! "); }}
现在,让我们将此applet称为以下 :
Event Handling
最初,小程序将显示"初始化小程序.启动小程序."然后一旦你点击矩形内部,也会显示"鼠标点击".
显示图像
小程序可以显示格式的图像GIF,JPEG,BMP等.要在applet中显示图像,可以使用java.awt.Graphics类中的drawImage()方法.
以下是一个示例,说明显示图像的所有步骤 :
import java.applet.*;import java.awt.*;import java.net.*;public class ImageDemo extends Applet { private Image image; private AppletContext context; public void init() { context = this.getAppletContext(); String imageURL = this.getParameter("image"); if(imageURL == null) { imageURL = "java.jpg"; } try { URL url = new URL(this.getDocumentBase(), imageURL); image = context.getImage(url); } catch (MalformedURLException e) { e.printStackTrace(); // Display in browser status bar context.showStatus("Could not load image!"); } } public void paint(Graphics g) { context.showStatus("Displaying image"); g.drawImage(image, 0, 0, 200, 84, null); g.drawString("www.javalicense.com", 35, 100); } }
现在,让我们将此applet称为以下 :
The ImageDemo applet
播放音频
小程序可以播放java.applet包中AudioClip接口所代表的音频文件. AudioClip接口有三种方法,包括 :
public void play() : 从头开始播放音频片段一次.
public void loop() : 使音频剪辑不断重播.
public void stop() : 停止播放音频片段.
要获取AudioClip对象,必须调用Applet类的getAudioClip()方法.无论URL是否解析为实际的音频文件,getAudioClip()方法都会立即返回.在尝试播放音频片段之前,不会下载音频文件.
以下是说明播放音频和减号的所有步骤的示例;
import java.applet.*;import java.awt.*;import java.net.*;public class AudioDemo extends Applet { private AudioClip clip; private AppletContext context; public void init() { context = this.getAppletContext(); String audioURL = this.getParameter("audio"); if(audioURL == null) { audioURL = "default.au"; } try { URL url = new URL(this.getDocumentBase(), audioURL); clip = context.getAudioClip(url); } catch (MalformedURLException e) { e.printStackTrace(); context.showStatus("Could not load audio file!"); } } public void start() { if(clip != null) { clip.loop(); } } public void stop() { if(clip != null) { clip.stop(); } }}
现在,让我们将此applet称为 :
The ImageDemo applet
您可以在PC上使用test.wav测试上述示例.