Java アプレットの基本


アプレットは Java プログラムです。通常、Java 対応の Web ブラウザ内で実行されます。 Java API を完全にサポートしているため、アプレットはフル機能の Java アプリケーションです。

スタンドアロン Java アプリケーションとアプレット プログラムの重要な違いは次のとおりです:

  • Javaのアプレットクラスはjava.applet.Appletクラスを継承します

  • アプレット クラスは main() を定義していないため、アプレット プログラムは main() メソッド

  • を呼び出すことはありません。 アプレットは、HTML ページに埋め込まれるように設計されています。

  • ユーザーがアプレットを含む HTML ページを閲覧すると、アプレットのコードがユーザーのマシンにダウンロードされます。

  • アプレットを表示するには、JVM が必要です。 JVM は、Web ブラウザーのプラグインまたはスタンドアロンのランタイム環境にすることができます。

  • ユーザーのマシン上の JVM は、アプレット クラスのインスタンスを作成し、アプレットのライフ サイクル中にさまざまなメソッドを呼び出します。

  • アプレットには、Web ブラウザによって適用される厳格なセキュリティ ルールがあり、アプレットのセキュリティ メカニズムはサンドボックス セキュリティと呼ばれます。

  • アプレットに必要な他のクラスは、Java アーカイブ (JAR) ファイルとしてダウンロードできます。


アプレットのライフサイクル

アプレット クラスの 4 つのメソッドは、小さなプログラムを開発できるフレームワークを提供します。

  • init: このメソッドの目的は、アプレットが提供するあらゆるものです。初期化が必要です。このメソッドは、Applet タグ内の param タグが処理された後に呼び出されます。

  • start: ブラウザが init メソッドを呼び出した後、このメソッドが自動的に呼び出されます。このメソッドは、ユーザーが別のページからアプレットを含むページに戻るたびに呼び出されます。

  • stop:このメソッドは、ユーザーがアプレットを含むページから削除すると自動的に呼び出されます。したがって、メソッドは同じアプレット内で繰り返し呼び出すことができます。

  • destroy: このメソッドは、ブラウザが通常に閉じられた場合にのみ呼び出されます。アプレットは HTML ページでのみ有効であるため、ユーザーがアプレットを含むページを離れた後、リソースを見逃さないようにする必要があります。

  • paint: このメソッドは、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コンパイラはアプレット クラスとグラフィック クラスを認識できません。


アプレット クラス

各アプレットは java.applet.Applet クラスのサブクラスであり、基本的なアプレット クラスは、ブラウザのコンテキスト情報とサービスを取得するための派生クラスによる呼び出しのメソッドを提供します。

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

  • アプレットのパラメータを取得します

  • アプレットを含むHTMLファイルのネットワーク上の場所を取得します

  • アプレットクラスのディレクトリのネットワーク上の場所を取得します

  • ブラウザのステータスを印刷します 情報

  • 写真を取得します

  • オーディオクリップを取得します

  • オーディオクリップを再生します

  • このアプレットのサイズを変更します

さらに、アプレットクラスは、インターフェイス 。このインターフェイスは、ビューアまたはブラウザによってアプレット情報を取得し、アプレットの実行を制御するために使用されます。

ビューアは次の可能性があります:

  • アプレットの作成者、バージョン、著作権に関する情報のリクエスト

  • アプレットによって認識されるパラメータの説明のリクエスト

  • アプレットの初期化

  • アプレットの破棄

  • アプレットの実行を開始

  • アプレットの実行を終了

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

「Hello, World」アプレットは標準に従って書かれています。オーバーライドされた唯一のメソッドは、paint メソッドです。


アプレットの呼び出し

アプレットはJavaプログラムです。通常、Java 対応の Web ブラウザ内で実行されます。 Java API を完全にサポートしているため、アプレットはフル機能の Java アプリケーションです。

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

注: HTML からアプレットを呼び出す方法の詳細については、HTML アプレット タグを参照してください。

<applet> タグの属性は、実行するアプレット クラスを指定します。幅と高さは、アプレット実行パネルの初期サイズを指定するために使用されます。アプレットは、</applet> タグを使用して閉じる必要があります。

アプレットがパラメータを受け入れる場合、パラメータの値を <applet> と </applet> の間にあるタグに追加する必要があります。ブラウザは、アプレット タグ間のテキストやその他のタグを無視します。

Java をサポートしていないブラウザでは <applet> および </applet> を実行できません。したがって、アプレットに関連しないタグ間に表示されるものはすべて、Java をサポートしていないブラウザでも表示されます。

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

以下に示すように:

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

アプレットがデフォルト パッケージ以外のパッケージにある場合は、そのパッケージを code 属性で指定する必要があります。例:

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

アプレット パラメータを取得する

次の例は、その方法を示しています。アプレットは、ファイルで指定されたパラメータを設定することによって応答します。このアプレットは、黒の市松模様と 2 番目の色を表示します。

各列の 2 番目の色とサイズは、ドキュメント内のアプレットのパラメータを通じて指定されます。

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;// 初始化默认大小
   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) {
     // 保留默认值
   }
}

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

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

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


アプレットパラメータを指定する

次の例は、CheckerApplet クラスが埋め込まれた HTML ファイルです。 HTML ファイルでは、タグを使用してアプレットの 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>

注: パラメータ名では大文字と小文字が区別されません。


アプリケーションをアプレットに変換

グラフィカル Java アプリケーション (AWT を使用するアプリケーションおよび Java プログラム ランチャーを使用して起動されるプログラムを指します) を、Web ページに埋め込まれたアプレットに変換するのは非常に簡単です。

アプリケーションをアプレットに変換する手順は次のとおりです:

  • アプレット コードをロードするタグを含む HTML ページを作成します。

  • JApplet クラスのサブクラスを作成し、クラスを public に設定します。そうしないと、アプレットをロードできません。

  • アプリケーションの main() メソッドを削除します。アプリケーションはブラウザに表示されるため、アプリケーションのフレーム ウィンドウを構築しないでください。

  • アプリケーションのフレーム ウィンドウの構築メソッドの初期化コードをアプレットの init() メソッドに移動します。アプレット オブジェクトを明示的に構築する必要はありません。ブラウザは init を呼び出してオブジェクトをインスタンス化します。 () 方法。

  • setSize() メソッドの呼び出しを削除します。アプレットの場合、サイズは HTML ファイルの幅と高さのパラメーターによって設定されています。

  • setDefaultCloseOperation() メソッドの呼び出しを削除します。アプレットは閉じることができず、ブラウザが終了すると終了します。

  • アプリケーションが setTitle() メソッドを呼び出す場合は、このメソッドの呼び出しを削除します。アプレットにはタイトル バーを含めることはできません。 (もちろん、HTML タイトルタグを使用して Web ページ自体に名前を付けることもできます)

  • setVisible(true) を呼び出さないでください。アプレットは自動的に表示されます。


イベント処理

Applet クラスは、Container クラスから多くのイベント処理メソッドを継承します。 Container クラスは、特殊なタイプのイベントを処理するために processKeyEvent() や processMouseEvent() などのいくつかのメソッドを定義します。 processEvent と呼ばれるすべてのイベントをキャプチャするメソッドもあります。

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

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>

初めて実行すると、アプレットは「アプレットを初期化しています。アプレットを開始しています。」と表示され、長方形のボックスをクリックするとすぐに「マウスがクリックされました」と表示されます。


画像の表示

アプレットは、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()を呼び出します。 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>

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