Java - アプレットの基本
アプレット Web ブラウザーで実行される Java プログラムです。アプレットは Java API 全体を自由に使用できるため、完全に機能する Java アプリケーションにすることができます。
アプレットとスタンドアロン Java アプリケーションの間には、次のような重要な違いがいくつかあります −
- <リ>
アプレットは、java.applet.Applet クラスを拡張する Java クラスです。
<リ>main() メソッドはアプレットで呼び出されず、アプレット クラスは main() を定義しません。
<リ>アプレットは、HTML ページに埋め込むように設計されています。
<リ>ユーザーがアプレットを含む HTML ページを表示すると、アプレットのコードがユーザーのマシンにダウンロードされます。
<リ>アプレットを表示するには JVM が必要です。 JVM は、Web ブラウザのプラグインまたは別のランタイム環境のいずれかです。
<リ>ユーザーのマシン上の JVM は、アプレット クラスのインスタンスを作成し、アプレットの有効期間中にさまざまなメソッドを呼び出します。
<リ>アプレットには、Web ブラウザによって実施される厳格なセキュリティ ルールがあります。アプレットのセキュリティは、サンドボックス セキュリティと呼ばれることが多く、アプレットを、従わなければならないさまざまなルールがあるサンドボックスで遊ぶ子供に例えます。
<リ>アプレットが必要とするその他のクラスは、単一の Java アーカイブ (JAR) ファイルでダウンロードできます。
アプレットのライフサイクル
Applet クラスの 4 つのメソッドは、本格的なアプレットを構築するためのフレームワークを提供します −
- <リ>
初期化 − このメソッドは、アプレットに必要な初期化を目的としています。アプレット タグ内の param タグが処理された後に呼び出されます。
<リ>開始 − このメソッドは、ブラウザが init メソッドを呼び出した後に自動的に呼び出されます。また、ユーザーが他のページに移動した後、アプレットを含むページに戻るたびに呼び出されます。
<リ>停止 − このメソッドは、ユーザーがアプレットのあるページから移動すると自動的に呼び出されます。したがって、同じアプレットで繰り返し呼び出すことができます。
<リ>破壊する − このメソッドは、ブラウザが正常にシャットダウンしたときにのみ呼び出されます。アプレットは HTML ページ上に存在することを意図しているため、通常、ユーザーがアプレットを含むページを離れた後にリソースを残すべきではありません。
<リ>ペイント − start() メソッドの直後、およびアプレットがブラウザで自身を再描画する必要があるときに呼び出されます。 paint() メソッドは実際には java.awt から継承されています。
「Hello, World」アプレット
以下は、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 ステートメントは、クラスをアプレット クラスのスコープに取り込みます −
- java.applet.Applet
- java.awt.Graphics
これらの import ステートメントがないと、Java コンパイラは、アプレット クラスが参照するクラス Applet と Graphics を認識できません。
アプレット クラス
すべてのアプレットは java.applet.Applet クラスの拡張です .基本アプレット クラスは、ブラウザ コンテキストから情報とサービスを取得するために派生アプレット クラスが呼び出すことができるメソッドを提供します。
これらには、次のことを行うメソッドが含まれます −
- アプレットのパラメータを取得
- アプレットを含む HTML ファイルのネットワーク上の場所を取得する
- アプレット クラス ディレクトリのネットワーク上の場所を取得する
- ブラウザにステータス メッセージを出力する
- 画像を取得する
- オーディオ クリップを取得する
- オーディオ クリップを再生する
- アプレットのサイズを変更する
さらに、Applet クラスは、ビューアまたはブラウザがアプレットに関する情報を取得し、アプレットの実行を制御するためのインターフェイスを提供します。視聴者は −
- アプレットの作成者、バージョン、著作権に関する情報を要求する
- アプレットが認識するパラメータの説明を要求する
- アプレットを初期化する
- アプレットを破棄する
- アプレットの実行を開始
- アプレットの実行を停止する
Applet クラスは、これらの各メソッドのデフォルトの実装を提供します。これらの実装は、必要に応じてオーバーライドできます。
「Hello, World」アプレットはこのまま完成です。オーバーライドされる唯一のメソッドはペイント メソッドです。
アプレットの呼び出し
アプレットは、HTML ファイルにディレクティブを埋め込み、アプレット ビューアまたは Java 対応ブラウザでファイルを表示することによって呼び出すことができます。
<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 からアプレットを呼び出す方法については、HTML アプレット タグを参照してください。
タグで閉じる必要があります。
アプレットがパラメーターを受け取る場合、 の間に タグを追加することで、パラメーターに値を渡すことができます。ブラウザは、アプレット タグ間のテキストやその他のタグを無視します。
Java 非対応のブラウザーは、 を処理しません。したがって、アプレットに関係なく、タグの間に表示されるものはすべて、Java 対応でないブラウザーで表示されます。
ビューアまたはブラウザは、ドキュメントの場所でコンパイルされた Java コードを探します。それ以外を指定するには、次のように
<applet codebase = "https://amrood.com/applets" code = "HelloWorldApplet.class" width = "320" height = "120">
アプレットがデフォルト以外のパッケージに存在する場合、保持パッケージは、ピリオド文字 (.) を使用して code 属性で指定し、パッケージ/クラス コンポーネントを区切る必要があります。たとえば-
<applet = "mypackage.subpackage.TestApplet.class" width = "320" height = "120">
アプレット パラメータの取得
次の例は、ドキュメントで指定されたセットアップ パラメータにアプレットを応答させる方法を示しています。このアプレットは、黒と 2 番目の色の市松模様を表示します。
2 番目の色と各正方形のサイズは、ドキュメント内のアプレットにパラメーターとして指定できます。
CheckerApplet は init() メソッドでパラメータを取得します。 paint() メソッドでパラメータを取得することもできます。ただし、更新のたびにではなく、アプレットの開始時に値を取得して設定を保存する方が便利で効率的です。
アプレット ビューアまたはブラウザは、実行する各アプレットの init() メソッドを呼び出します。ビューアーは、アプレットをロードした直後に init() を 1 回呼び出します。 (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 パラメータを解析して Color 値に変換します。 parseColor() は一連の文字列比較を行い、パラメータ値を定義済みの色の名前と照合します。このアプレットを機能させるには、これらのメソッドを実装する必要があります。
アプレット パラメータの指定
以下は、CheckerApplet が埋め込まれた HTML ファイルの例です。 HTML ファイルは、 タグを使用して、両方のパラメータをアプレットに指定します。
<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>
注意 − パラメータ名は大文字と小文字を区別しません。
アプレットへのアプリケーションの変換
グラフィカル Java アプリケーション (つまり、AWT を使用し、Java プログラム ランチャーで開始できるアプリケーション) を Web ページに埋め込むことができるアプレットに変換するのは簡単です。
以下は、アプリケーションをアプレットに変換するための具体的な手順です。
- <リ>
アプレット コードをロードするための適切なタグを含む HTML ページを作成します。
<リ>JApplet クラスのサブクラスを提供します。このクラスを公開します。そうしないと、アプレットをロードできません。
<リ>アプリケーションの main メソッドを削除します。アプリケーションのフレーム ウィンドウを作成しないでください。アプリケーションがブラウザ内に表示されます。
<リ>初期化コードをフレーム ウィンドウ コンストラクターからアプレットの init メソッドに移動します。アプレット オブジェクトを明示的に構築する必要はありません。ブラウザがインスタンスを作成し、init メソッドを呼び出します。
<リ>setSize の呼び出しを削除します。アプレットの場合、サイジングは HTML ファイルの幅と高さのパラメータで行われます。
<リ>setDefaultCloseOperation への呼び出しを削除します。アプレットを閉じることはできません。ブラウザが終了すると終了します。
<リ>アプリケーションが setTitle を呼び出す場合は、メソッドへの呼び出しを削除します。アプレットにタイトル バーを含めることはできません。 (もちろん、HTML タイトル タグを使用して、Web ページ自体にタイトルを付けることができます。)
<リ>setVisible(true) を呼び出さないでください。アプレットが自動的に表示されます。
イベント処理
アプレットは、Container クラスから一連のイベント処理メソッドを継承します。 Container クラスは、特定のタイプのイベントを処理するための processKeyEvent や processMouseEvent などのいくつかのメソッドを定義し、次に processEvent と呼ばれる 1 つのキャッチオール メソッドを定義します。
イベントに反応するために、アプレットは適切なイベント固有のメソッドをオーバーライドする必要があります。
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! "); } }
さて、このアプレットを次のように呼び出しましょう −
<html> <title>Event Handling</title> <hr> <applet code = "ExampleEventHandling.class" width = "300" height = "300"> </applet> <hr> </html>
最初に、アプレットは「アプレットを初期化しています。アプレットを開始しています」と表示します。次に、長方形の内側をクリックすると、「mouse clicked」も表示されます。
画像の表示
アプレットは、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); } }
さて、このアプレットを次のように呼び出しましょう −
<html> <title>The ImageDemo applet</title> <hr> <applet code = "ImageDemo.class" width = "300" height = "200"> <param name = "image" value = "java.jpg"> </applet> <hr> </html>
オーディオの再生
アプレットは、java.applet パッケージの AudioClip インターフェイスによって表されるオーディオ ファイルを再生できます。 AudioClip インターフェイスには、以下を含む 3 つのメソッドがあります-
- <リ>
public void play() − オーディオ クリップを最初から 1 回再生します。
<リ>public void loop() − オーディオ クリップを継続的に再生します。
<リ>public void stop() − オーディオ クリップの再生を停止します。
AudioClip オブジェクトを取得するには、Applet クラスの getAudioClip() メソッドを呼び出す必要があります。 getAudioClip() メソッドは、URL が実際のオーディオ ファイルに解決されるかどうかに関係なく、すぐに戻ります。オーディオ クリップの再生が試行されるまで、オーディオ ファイルはダウンロードされません。
以下は、オーディオを再生するすべての手順を示す例です −
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(); } } }
さて、このアプレットを次のように呼び出しましょう −
<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 を使用できます。
Java