English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Java 基礎教程

Javaの流程制御

Javaの配列

Javaのオブジェクト指向(I)

Javaのオブジェクト指向(II)

Javaのオブジェクト指向(III)

Java 異常処理

Javaリスト(List)

Java Queue(キュー)

Java Map集合

Java Set集合

Java入出力(I/O)

Java Reader/Writer

Javaの他のトピック

Java Applet 基礎

AppletはJavaプログラムです。一般的にはJavaをサポートするWebブラウザ内で実行されます。完全なJavaAPIサポートがあるため、Appletは機能豊富なJavaアプリケーションです。

以下のように、独立のJavaアプリケーションとAppletプログラムの重要な違いは以下の通りです:

  • JavaのAppletクラスはjava.applet.Appletクラスを継承しています。

  • Applet クラスには main() が定義されていないため、Applet プログラムは main() メソッドを呼び出しません。

  • Applet は HTML ページに埋め込まれるように設計されています。

  • ユーザーが Applet を含む HTML ページをブラウジングすると、Applet のコードがユーザーのマシンにダウンロードされます。

  • Applet を表示するには JVMが必要です。JVM はブラウザのプラグインまたは独立したランタイム環境です。

  • ユーザーのマシン上の 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 ページ上で有効であるため、ユーザーが Applet を含むページを離れた後にリソースを遗漏しないようにしてください。

  • paint: このメソッドは start() メソッドの直後に呼び出されます。または、Applet がブラウザで再描画が必要な場合に呼び出されます。paint() メソッドは実際には java.awt から継承されています。

"Hello, World" Applet:

以下は、簡単な Applet プログラム 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クラスはビューアまたはブラウザがAppletの情報を取得し、Appletの実行を制御するためのインターフェースを提供しています。

ビューアは以下のものかもしれません:

  • Appletの作者、バージョン、著作権の情報を要求します

  • Appletが識別するパラメータの説明を要求します

  • Appletを初期化します

  • Appletを破棄します

  • Appletの実行を開始します

  • Appletの実行を終了します

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

「Hello,World」appletは標準で書かれています。書き換えられた唯一のメソッドはpaintメソッドです。

Appletの呼び出し

AppletはJavaプログラムのことです。一般的にはJavaをサポートするWebブラウザ内で実行されます。完全なJava APIサポートがあるため、Appletは全機能を持つJavaアプリケーションです。

HTMLファイルにAppletを埋め込む基本となる<applet>タグです。以下は「Hello World」appletを呼び出す例です;

<html>
<title>The Hello, World Applet</title>
<hr>
<applet code="HelloWorldApplet.class" width="320" height="120">
もしあなたのブラウザがJavaをサポートしていれば-有効化されると、「Hello, World」
ここにメッセージが表示されます。
</applet>
<hr>
</html>

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

标签的属性指定了要运行的 Applet 类。width 和 height 用来指定 Applet 运行面板的初始大小。Applet 必须使用

Appletがパラメータを受け入れる場合、パラメータの値は<param>タグに追加する必要があります。このタグは<applet>と</applet>間を実行できません。ブラウザは<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 の修正例です:

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プログラムスタートアップを使用するアプリケーションを指します)をウェブページ内に埋め込む Applet に変換することは非常に簡単です。

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

  • Applet コードをロードできるHTMLページを作成してください。

  • JApplet クラスのサブクラスを作成し、そのクラスを public に設定してください。そうしないと、Applet はロードされません。

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

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

  • setSize() メソッドの呼び出しを削除してください。Applet のサイズは既にHTMLファイルの width と height パラメータで設定されています。

  • closeDefaultOperation() メソッドの呼び出しを削除してください。Applet は閉じられません。Applet はブラウザの終了とともに終了します。

  • アプリケーションが setTitle() メソッドを呼び出した場合、その呼び出しを削除してください。Applet にはタイトルバーはありません。(もちろん、HTMLのtitleタグでページ自身に名前を付けることもできます)

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

イベントハンドリング

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 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) {
         //アプリエットの表示エリアに四角形を描画します。
        g.drawRect(0, 0,
                      getWidth() - 1,
                      getHeight()} - 1);
 
         //矩形内に文字を表示します。
        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>イベント処理</title>
<hr>
<applet code="ExampleEventHandling.class"
width="300" height="300">
</applet>
<hr>
</html>

最初に実行すると、Appletは"Appletを初期化しています。Appletを開始しています。"と表示され、矩形ボックスをクリックすると"mouse clicked"と表示されます。

画像表示

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();
         // ブラウザのステータスバーに表示
         context.showStatus("画像を読み込めませんでした。");
      }
   }
   public void paint(Graphics g)
   {
      context.showStatus("Displaying image");
       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 が実際のオーディオファイルを指しているかどうかに関わらず、このメソッドはすぐに結果を返します。

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

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

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 を使用してテストしてください。