Java Applet の基礎

Applet は Java プログラムの一種です。通常は Java をサポートする Web ブラウザ内で動作します。完全な Java API をサポートしているため、Applet はフル機能の Java アプリケーションです。

以下に示すのは、スタンドアロンの Java アプリケーションと applet プログラムの間の重要な違いです。

  • Java では、Applet クラスは java.applet.Applet クラスを継承します。
  • Applet クラスは main() を定義していないため、Applet プログラムは main() メソッドを呼び出しません。
  • Applet は HTML ページに埋め込まれるように設計されています。
  • ユーザーが Applet を含む HTML ページを閲覧すると、Applet のコードがユーザーのマシンにダウンロードされます。
  • Applet を表示するには JVM が必要です。JVM は Web ブラウザのプラグイン、または独立したランタイム環境の場合があります。
  • ユーザーのマシン上の JVM は Applet クラスのインスタンスを生成し、Applet のライフサイクルプロセスにおけるさまざまなメソッドを呼び出します。
  • Applet には Web ブラウザによって強制される厳格なセキュリティルールがあり、Applet のセキュリティメカニズムはサンドボックスセキュリティと呼ばれます。
  • Applet が必要とするその他のクラスは、Java アーカイブ(JAR)ファイルの形式でダウンロードできます。

Applet のライフサイクル

Applet クラスの4つのメソッドは、フレームワークを提供します。このフレームワーク上で小さなアプリケーションを開発できます。

  • init: このメソッドの目的は、Applet に必要な初期化を提供することです。Applet タグ内の param タグが処理された後に、このメソッドが呼び出されます。
  • start:ブラウザが init メソッドを呼び出した後、このメソッドが自動的に呼び出されます。ユーザーが他のページから Applet を含むページに戻るたびに、このメソッドが呼び出されます。
  • stop:ユーザーが Applet を含むページから離れるときに、このメソッドは自動的に呼び出されます。したがって、同じ Applet 内でこのメソッドを繰り返し呼び出すことができます。
  • destroy: このメソッドは、ブラウザが正常に閉じられたときにのみ呼び出されます。Applet は HTML の Web ページ上でのみ有効であるため、ユーザーが Applet を含むページを離れた後にリソースを漏らしてはいけません。
  • paint:このメソッドは start() メソッドの直後に呼び出されるか、Applet がブラウザ上で再描画する必要があるときに呼び出されます。paint() メソッドは実際には java.awt から継承されています。

"Hello, World" Applet:

以下は簡単な Applet プログラム HelloWorldApplet.java です:

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 クラスと Graphics クラスを認識できません。


Applet クラス

すべての Applet は java.applet.Applet クラスのサブクラスです。基本の Applet クラスは、派生クラスが呼び出してブラウザコンテキストの情報とサービスを取得するためのメソッドを提供します。

これらのメソッドは次のことを行います:

  • Applet のパラメータを取得する
  • Applet を含む HTML ファイルのネットワーク上の位置を取得する
  • Applet クラスのディレクトリのネットワーク上の位置を取得する
  • ブラウザのステータス情報を出力する
  • 画像を取得する
  • オーディオクリップを取得する
  • オーディオクリップを再生する
  • この Applet のサイズを調整する

これに加えて、Applet クラスは、Viewer またはブラウザが Applet の情報を取得し、Applet の実行を制御するためのインターフェースも提供します。

Viewer は次のことができます:

  • Applet の作者、バージョン、著作権情報を要求する
  • Applet が認識するパラメータの説明を要求する
  • Applet を初期化する
  • Applet を破棄する
  • Applet の実行を開始する
  • Applet の実行を終了する

Applet クラスはこれらのメソッドのデフォルト実装を提供しており、これらのメソッドは必要に応じてオーバーライドできます。

"Hello, World" applet は標準に従って作成されています。唯一オーバーライドされるメソッドは paint メソッドです。


Applet の呼び出し

Applet は Java プログラムの一種です。通常は Java をサポートする Web ブラウザ内で動作します。完全な Java API をサポートしているため、Applet はフル機能の Java アプリケーションです。

<applet> タグは、HTML ファイルに Applet を埋め込むための基本です。以下は "Hello World" applet を呼び出す例です:

HTML コード:

<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>

注意:HTML Applet タグを参照すると、HTML から applet を呼び出す方法についてさらに詳しく知ることができます。

<applet> タグの属性は、実行する Applet クラスを指定します。width と height は、Applet 実行パネルの初期サイズを指定するために使用されます。Applet は </applet> タグで閉じる必要があります。

Applet がパラメータを受け取る場合、パラメータの値は <applet> と </applet> の間にある <param> タグ内に追加する必要があります。ブラウザは applet タグ間のテキストと他のタグを無視します。

Java をサポートしないブラウザは <applet> と </applet> を実行できません。したがって、タグの間に表示され、applet とは関係のないものは、Java をサポートしないブラウザで表示できます。

Viewer またはブラウザは、ドキュメントの場所でコンパイル済みの Java コードを探します。ドキュメントのパスを指定するには、<applet> タグの codebase 属性を使用する必要があります。

次に示すとおりです:

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

Applet がデフォルトパッケージではなくパッケージ内にある場合、そのパッケージを code 属性で指定する必要があります。例:

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

applet パラメータの取得

次の例は、Applet がファイル内で指定されたパラメータに応答する方法を示しています。この Applet は、黒いチェッカーボードパターンと2番目の色を表示します。

2番目の色と各列のサイズは、ドキュメント内の Applet のパラメータによって指定されます。

CheckerApplet は init() メソッド内でそのパラメータを取得します。paint() メソッド内でもパラメータを取得できます。しかし、Applet の開始時に値を取得し設定を保存することは、毎回のリフレッシュ時に値を取得するよりも便利で効率的です。

Applet viewer またはブラウザは、Applet が実行されるたびに init() メソッドを呼び出します。Applet のロード後、Viewer は直ちに init() メソッドを呼び出します(Applet.init() は何も行いません)。このメソッドのデフォルト実装をオーバーライドして、独自の初期化コードを追加します。

Applet.getParameter() メソッドは、パラメータ名を指定してパラメータ値を取得します。取得した値が数値やその他の文字以外のデータである場合、文字列型に解析する必要があります。

次の例は、CheckerApplet.java を変更したものです:

CheckerApplet.java ファイルコード:

import java.applet.*; import java.awt.*; public class CheckerApplet extends Applet { int squareSize = 50;//デフォルトサイズの初期化 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) { //デフォルト値を保持する } }

この Applet は parseSquareSize() を呼び出して、squareSize パラメータを解析します。parseSquareSize() はライブラリメソッド Integer.parseInt() を呼び出します。このメソッドは文字列を整数として解析し、パラメータが無効な場合、Integer.parseInt() は例外をスローします。

したがって、parseSquareSize() メソッドも例外をキャッチし、Applet が無効な入力を受け取ることを許可しません。

Applet は parseColor() メソッドを呼び出して、色パラメータを Color 値として解析します。parseColor() メソッドは一連の文字列比較を行い、パラメータの値と事前定義された色の名前を照合します。これらのメソッドを実装して、Applet を動作させる必要があります。


applet パラメータの指定

以下の例は、CheckerApplet クラスを埋め込んだ HTML ファイルです。HTML ファイルは <param> タグを使用して、applet に 2 つのパラメータを指定しています。

<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>

注意:パラメータ名は大文字と小文字を区別しません。


アプリケーションを Applet に変換する

グラフィカルな Java アプリケーション(AWT を使用するアプリケーションや java プログラムランチャーで起動するプログラム)を Web ページに埋め込まれた applet に変換するのは非常に簡単です。

以下は、アプリケーションを Applet に変換する手順です:

  • applet コードをロードできるタグを含む HTML ページを作成します。
  • JApplet クラスのサブクラスを作成し、そのクラスを public に設定します。そうしないと、Applet はロードできません。
  • アプリケーションの main() メソッドを削除します。アプリケーションはブラウザ内に表示されるため、フレームウィンドウを構築しないでください。
  • アプリケーションのフレームウィンドウのコンストラクタ内の初期化コードを Applet の init() メソッドに移動します。Applet オブジェクトを明示的に構築する必要はありません。ブラウザが init() メソッドを呼び出してオブジェクトをインスタンス化します。
  • setSize() メソッドの呼び出しを削除します。Applet の場合、サイズは HTML ファイル内の width パラメータと height パラメータで既に設定されています。
  • setDefaultCloseOperation() メソッドの呼び出しを削除します。Applet は閉じることができず、ブラウザの終了とともに終了します。
  • アプリケーションが setTitle() メソッドを呼び出している場合は、その呼び出しを削除します。applet はタイトルバーを持つことができません。(もちろん、HTML の title タグを使用して Web ページ自体に名前を付けることはできます)
  • setVisible(true) を呼び出さないでください。Applet は自動的に表示されます。

イベント処理

Applet クラスは Container クラスから多くのイベント処理メソッドを継承しています。Container クラスは、特定の種類のイベントを処理するための processKeyEvent() や processMouseEvent() などのメソッドと、すべてのイベントをキャッチする processEvent というメソッドを定義しています。

イベントに応答するには、Applet は適切なイベント処理メソッドをオーバーライドする必要があります。

ExampleEventHandling.java ファイルコード:

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 applet "); } 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 は "initializing the applet. Starting the applet." と表示します。その後、矩形ボックスをクリックすると、"mouse clicked" が表示されます。


画像の表示

Applet は GIF、JPEG、BMP などの他の形式の画像を表示できます。Applet に画像を表示するには、java.awt.Graphics クラスの drawImage() メソッドを使用する必要があります。

以下の例は、画像を表示するすべての手順を示しています:

ImageDemo.java ファイルコード:

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 インターフェースは 3 つのメソッドを定義しています:

  • public void play():オーディオクリップを最初から一度再生します。
  • public void loop(): オーディオクリップをループ再生します
  • public void stop(): オーディオクリップの再生を停止します

AudioClip オブジェクトを取得するには、Applet クラスの getAudioClip() メソッドを呼び出す必要があります。URL が実際のオーディオファイルを指しているかどうかに関係なく、このメソッドはすぐに結果を返します。

オーディオファイルを再生する時まで、そのファイルはダウンロードされません。

以下の例は、オーディオを再生するすべての手順を示しています:

AudioDemo.java ファイルコード:

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>

お使いのコンピュータにある test.wav を使用して、上記の例をテストできます。

その他の拡張