Applet基础知识(Applet Basics)
applet是一个在Web浏览器中运行的Java程序。 applet可以是一个功能齐全的Java应用程序,因为它可以使用整个Java API。
applet和独立Java应用程序之间存在一些重要差异,包括以下内容 -
applet是一个扩展java.applet.Applet类的Java类。
不在applet上调用main()方法,并且applet类不会定义main()。
Applet旨在嵌入HTML页面中。
当用户查看包含applet的HTML页面时,applet的代码将下载到用户的计算机上。
查看applet需要JVM。 JVM可以是Web浏览器的插件,也可以是单独的运行时环境。
用户计算机上的JVM创建applet类的实例,并在applet的生命周期内调用各种方法。
Applet具有由Web浏览器强制执行的严格安全规则。 applet的安全性通常被称为沙箱安全性,将applet与在沙箱中玩的孩子进行比较,并遵循必须遵循的各种规则。
applet所需的其他类可以在单个Java Archive(JAR)文件中下载。
小程序的生命周期
Applet类中的四个方法为您提供了构建任何严重applet的框架 -
init - 此方法适用于applet所需的初始化。 在处理applet标记内的param标记之后调用它。
start - 在浏览器调用init方法后自动调用此方法。 每当用户在离开其他页面后返回包含applet的页面时,也会调用它。
stop - 当用户离开applet所在的页面时,将自动调用此方法。 因此,它可以在同一个小程序中重复调用。
destroy - 仅在浏览器正常关闭时调用此方法。 因为applet意味着生活在HTML页面上,所以在用户离开包含applet的页面后,通常不应该留下资源。
paint - 在start()方法之后立即调用,也是applet需要在浏览器中重新绘制的任何时候。 paint()方法实际上是从java.awt继承的。
一个“Hello,World”Applet
以下是一个名为HelloWorldApplet.java的简单applet -
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都是java.applet.Applet class的扩展。 基础Applet类提供派生Applet类可以调用以从浏览器上下文获取信息和服务的方法。
这些包括执行以下操作的方法 -
- 获取applet参数
- 获取包含applet的HTML文件的网络位置
- 获取applet类目录的网络位置
- 在浏览器中打印状态消息
- 获取图像
- 获取音频剪辑
- 播放音频剪辑
- 调整小程序的大小
此外,Applet类提供了一个界面,通过该界面,查看器或浏览器可以获取有关applet的信息并控制applet的执行。 观众可以 -
- 请求有关applet的作者,版本和版权的信息
- 请求applet识别的参数的描述
- Initialize the applet
- 销毁小程序
- 启动applet的执行
- 停止applet的执行
Applet类提供了每种方法的默认实现。 可以根据需要覆盖这些实现。
“Hello,World”小程序已经完成。 重写的唯一方法是paint方法。
调用Applet
可以通过在HTML文件中嵌入指令并通过applet查看器或支持Java的浏览器查看文件来调用applet。
标记是将applet嵌入HTML文件的基础。 以下是调用“Hello,World”小程序的示例 -
<html>
<title>The Hello, World Applet</title>
<hr>
<applet code = "HelloWorldApplet.class" width = "320" height = "120">
If your browser was Java-enabled, a "Hello, World"
message would appear here.
</applet>
<hr>
</html>
Note - 您可以参考HTML Applet标记以了解有关从HTML调用applet的更多信息。
标记的code属性是必需的。 它指定要运行的Applet类。 还需要宽度和高度来指定运行applet的面板的初始大小。 必须使用 applet>标记关闭applet指令。
如果applet接受参数,则可以通过在和 applet>之间添加标记来为参数传递值。 浏览器忽略applet标记之间的文本和其他标记。
不支持Java的浏览器不处理和 applet>。 因此,在非Java启用的浏览器中可以看到标记之间出现的与applet无关的任何内容。
查看器或浏览器在文档的位置查找已编译的Java代码。 要另行指定,请使用标记的codebase属性,如图所示 -
<applet codebase = "https://amrood.com/applets" code = "HelloWorldApplet.class"
width = "320" height = "120">
如果applet驻留在默认包以外的包中,则必须使用句点字符(。)在code属性中指定保留包以分隔包/类组件。 例如 -
<applet = "mypackage.subpackage.TestApplet.class"
width = "320" height = "120">
获取Applet参数
以下示例演示如何使applet响应文档中指定的设置参数。 这个小程序显示黑色和第二种颜色的棋盘图案。
可以将第二颜色和每个正方形的大小指定为文档中的小程序的参数。
CheckerApplet在init()方法中获取其参数。 它也可以在paint()方法中获取其参数。 但是,在applet的开头获取值并保存设置,而不是每次刷新都是方便有效的。
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文件通过标记指定applet的两个参数。
<html>
<title>Checkerboard Applet</title>
<hr>
<applet code = "CheckerApplet.class" width = "480" height = "320">
<param name = "color" value = "blue">
<param name = "squaresize" value = "30">
</applet>
<hr>
</html>
Note - 参数名称不区分大小写。
应用程序转换到Applet
将图形化Java应用程序(即使用AWT并且可以从Java程序启动器开始的应用程序)转换为可以嵌入网页的applet很容易。
以下是将应用程序转换为applet的具体步骤。
使用适当的标记创建一个HTML页面以加载applet代码。
提供JApplet类的子类。 将此课程公之于众。 否则,无法加载applet。
消除应用程序中的主要方法。 不要为应用程序构造框架窗口。 您的应用程序将显示在浏览器中。
将任何初始化代码从框架窗口构造函数移动到applet的init方法。 您不需要显式构造applet对象。 浏览器为您实例化它并调用init方法。
删除对setSize的调用; 对于applet,使用HTML文件中的width和height参数完成大小调整。
删除对setDefaultCloseOperation的调用。 小程序无法关闭; 它会在浏览器退出时终止。
如果应用程序调用setTitle,则取消对该方法的调用。 小程序不能有标题栏。 (当然,您可以使用HTML标题标记对网页本身进行标题。)
不要调用setVisible(true)。 小程序会自动显示。
事件处理
Applet从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称为如下 -
<html>
<title>Event Handling</title>
<hr>
<applet code = "ExampleEventHandling.class"
width = "300" height = "300">
</applet>
<hr>
</html>
最初,applet将显示“初始化applet。启动applet”。 然后,当您在矩形内部单击时,也会显示“鼠标单击”。
显示图像
小程序可以显示格式为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称为如下 -
<html>
<title>The ImageDemo applet</title>
<hr>
<applet code = "ImageDemo.class" width = "300" height = "200">
<param name = "image" value = "java.jpg">
</applet>
<hr>
</html>
播放音频
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称为如下 -
<html>
<title>The ImageDemo applet</title>
<hr>
<applet code = "ImageDemo.class" width = "0" height = "0">
<param name = "audio" value = "test.wav">
</applet>
<hr>
</html>
您可以在PC上使用test.wav来测试上面的示例。