首页 小程序 小程序新闻中心 详情

Java - 小程序基础

2019-02-01

小程序是在Web浏览器中运行的Java程序。小程序可以是个功能齐全的 Java 应用程序,因为它可以使用整个 Java API。

小程序和立的 Java 应用程序之间有些重要的区别,包括以下内容 -

  • 小程序是扩展 java.applet.Applet 类的 Java 类。

  • 不会在小程序上调用 main() 方法,并且小程序类不会定义 main()。

  • 小程序被设计为嵌入在 HTML 页面中。

  • 当用户查看包含小程序的 HTML 页面时,小程序的代码会下载到用户的机器上。

  • 需要 JVM 才能查看小程序。JVM 可以是 Web 浏览器的插件,也可以是单的运行时环境。

  • 用户机器上的 JVM 创建小程序类的个实例,并在小程序的生命周期内调用各种方法。

  • 小程序具有由 Web 浏览器强制执行的严格安全规则。小程序的安全性通常被称为沙箱安全性,将小程序比作在沙箱中玩耍的孩子,必须遵守各种规则。

  • 小程序需要的其他类可以下载到单个 Java 存档 (JAR) 文件中。

Applet 的生命周期

Applet 类中的四种方法为您提供了构建任何严肃小程序的框架 -

  • init - 此方法用于小程序所需的任何初始化。它在 applet 标签内的 param 标签处理完毕后被调用。

  • start - 在浏览器调用 init 方法后自动调用此方法。每当用户在转到其他页面后返回包含小程序的页面时,也会调用它。

  • stop - 当用户离开小程序所在的页面时,会自动调用此方法。因此,它可以在同个小程序中重复调用。

  • destroy - 此方法仅在浏览器正常关闭时调用。由于小应用程序旨在存在于 HTML 页面上,因此通常不应在用户离开包含小应用程序的页面后留下资源。

  • 绘画- 在 start() 方法之后立即调用,也可以在小程序需要在浏览器中重新绘制自己的任何时候调用。Paint() 方法实际上是从 java.awt 继承的。

“你好,世界”小程序

以下是个名为 HelloWorldApplet.java 的简单小程序 -

import java.applet.*;import java.awt.*;public class HelloWorldApplet extends Applet {
  public void paint (Graphics g) {
     g.drawString ("Hello World", 25, 50);
  }}

这些导入语句将类带入我们的小程序类的范围 -

  • java.applet.applet

  • java.awt.Graphics

如果没有这些 import 语句,Java 编译器将无法识别 Applet 类所引用的 Applet 和 Graphics 类。

小程序类

每个小程序都是java.applet.Applet 类的扩展基 Applet 类提供派生 Applet 类可以调用的方法,以从浏览器上下文中获取信息和服务。

这些包括执行以下操作的方法 -

  • 获取小程序参数

  • 获取包含小程序的 HTML 文件的网络位置

  • 获取小程序类目录的网络位置

  • 在浏览器中打印状态消息

  • 获取图像

  • 获取音频剪辑

  • 播放音频剪辑

  • 调整小程序大小

此外,Applet 类提供了个接口,查看器或浏览器通过该接口获取有关小程序的信息并控制小程序的执行。观众可能 -

  • 请求有关小程序的作者、版本和版权的信息

  • 请求小程序识别的参数的描述

  • 初始化小程序

  • 销毁小程序

  • 启动小程序的执行

  • 停止小程序的执行

Applet 类提供了这些方法中的每个的默认实现。这些实现可以根据需要被覆盖。

“Hello, World”小程序就这样完成了。唯被覆盖的方法是paint方法。

调用小程序

可以通过在 HTML 文件中嵌入指令并通过小程序查看器或支持 Java 的浏览器查看文件来调用小程序。

标签是在 HTML 文件中嵌入小程序的基础。以下是调用“Hello, World”小程序的示例 -

[object Object]
  
  [object Object]

注意- 您可以参考HTML Applet 标签以了解有关从 HTML 调用小程序的更多信息。

标签的代码属性是必需的。它指定要运行的 Applet 类。还需要宽度和高度来指定小程序在其中运行的面板的初始大小。applet 指令必须用标签结束。

如果小程序接受参数,则可以通过在之间添加标签来传递参数值。浏览器会忽略小程序标签之间的文本和其他标签。

不支持 Java 的浏览器不处理因此,出现在标记之间的任何与小程序无关的内容在不支持 Java 的浏览器中都是可见的。

查看器或浏览器在文档位置查找已编译的 Java 代码。要以其他方式指定,请使用标签的 codebase 属性,如下所示 -

<applet codebase = "https://amrood.com/applets" code = "HelloWorldApplet.class"
  width = "320" height = "120">

如果小程序驻留在默认包之外的包中,则必须在代码属性中使用句点字符 (.) 来指定保持包,以分隔包/类组件。例如 -

<applet  = "mypackage.subpackage.TestApplet.class"
  width = "320" height = "120">

获取小程序参数

下面的示例演示如何使小程序响应文档中指定的设置参数。此小程序显示黑色和第二种颜色的棋盘格图案。

可以将第二颜色和每个方块的大小指定为文档内小程序的参数。

CheckerApplet 在 init() 方法中获取其参数。它还可以在paint() 方法中获取其参数。但是,在小程序启动时获取值并保存设置次,而不是在每次刷新时都方便且高效。

小程序查看器或浏览器调用它运行的每个小程序的 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
  }}

小程序调用 parseSquareSize() 来解析 squareSize 参数。parseSquareSize() 调用库方法 Integer.parseInt(),它解析个字符串并返回个整数。Integer.parseInt() 在其参数无效时抛出异常。

因此, parseSquareSize() 捕获异常,而不是允许小程序在错误输入时失败。

小程序调用 parseColor() 将颜色参数解析为 Color 值。parseColor() 执行系列字符串比较以将参数值与预定义颜色的名称相匹配。您需要实现这些方法才能使这个小程序工作。

指定小程序参数

下面是个 HTML 文件的示例,其中嵌入了 CheckerApplet。HTML 文件通过标记为小程序指定了这两个参数。

[object Object]
  
  [object Object]

注意- 参数名称不区分大小写。

应用程序转换为小程序

将图形 Java 应用程序(即使用 AWT 并且可以从 Java 程序启动器启动的应用程序)转换为可以嵌入到网页中的小程序很容易。

以下是将应用程序转换为小程序的具体步骤。

  • 使用适当的标记制作个 HTML 页面以加载小程序代码。

  • 提供 JApplet 类的子类。公开这个班级。否则,无法加载小程序。

  • 消除应用程序中的主要方法。不要为应用程序构建框架窗口。您的应用程序将显示在浏览器中。

  • 将任何初始化代码从框架窗口构造函数移动到小程序的 init 方法。您不需要显式构造小程序对象。浏览器为您实例化它并调用 init 方法。

  • 删除对 setSize 的调用;对于小程序,大小是通过 HTML 文件中的宽度和高度参数完成的。

  • 删除对 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! ");
  }}

现在,让我们如下调用这个小程序 -

[object Object]
  <applet code = "ExampleEventHandling.class" 
     width = "300" height = "300">
  
  [object Object]

初,小程序将显示“正在初始化小程序。正在启动小程序”。然后,旦您在矩形内单击,也会显示“鼠标单击”。

显示图像

小程序可以显示 GIF、JPEG、BMP 等格式的图像。要在小程序中显示图像,您可以使用 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);
  }  }

现在,让我们如下调用这个小程序 -

[object Object]
  
  [object Object]

播放音频

小程序可以播放 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();
     }
  }}

现在,让我们如下调用这个小程序 -

[object Object]
  
  [object Object]

您可以在 PC 上使用 test.wav 来测试上述示例。


相关文章

微信小程序是针对中国市场的需求量身定制的...
Java 应用程序就像是在虚拟机的支持下...

contact us

服务热线:0632-52721230632-5271123

业务咨询:1396946888218006320170

营销中心:山东省 枣庄市 市中区 中坚1878 A406室

邮箱:kf@zzint.com

微信客服
在线联系
13969468882
返回顶部