工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> Java

Javaアプレット入門:基礎と主要な違い

アプレットとは

アプレットはWebブラウザ上で実行されるJavaプログラムです。アプレットはJava API全体を利用できるため、完全に機能するJavaアプリケーションとなり得ます。

アプレットとスタンドアロンのJavaアプリケーションには、以下のような重要な違いがあります:

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

Appletクラスの4つのメソッドが、本格的なアプレットを構築するためのフレームワークを提供します:

"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文により、以下のクラスがアプレットクラスのスコープに導入されます:

これらのimport文がないと、Javaコンパイラはアプレットクラスが参照するAppletクラスとGraphicsクラスを認識できません。

Appletクラス

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

これらには以下の機能を持つメソッドが含まれます:

また、Appletクラスはビューアまたはブラウザがアプレットについての情報を取得し、アプレットの実行を制御するためのインターフェースを提供します。ビューアは以下が可能です:

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

"Hello, World"アプレットは現状のままでも完成しています。オーバーライドされているのはpaintメソッドのみです。

アプレットの呼び出し

アプレットは、HTMLファイルにディレクティブを埋め込み、アプレットビューアまたは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>タグのcode属性は必須です。実行するAppletクラスを指定します。widthとheightも、アプレットが実行されるパネルの初期サイズを指定するために必須です。アプレットディレクティブは</applet>タグで閉じる必要があります。

アプレットがパラメータを取る場合、<applet>と</applet>の間に<param>タグを追加してパラメータの値を渡せます。ブラウザはアプレットタグ間のテキストや他のタグを無視します。

Java非対応ブラウザは<applet>と</applet>を処理しません。したがって、タグ間にあるアプレットに関係ないものは、Java非対応ブラウザで表示されます。

ビューアやブラウザは、ドキュメントの場所でコンパイル済みJavaコードを探します。別の場所を指定するには、<applet>タグのcodebase属性を使用します:

<applet codebase="https://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パラメータをColor値にパースします。parseColor()は一連の文字列比較を行い、パラメータ値を定義済み色の名前と照合します。このアプレットを動作させるにはこれらのメソッドを実装する必要があります。

アプレットパラメータの指定

CheckerAppletを埋め込んだHTMLファイルの例です。HTMLファイルは<param>タグでアプレットへの両パラメータを指定しています。

<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ページに埋め込めるアプレットに変換するのは容易です。

アプリケーションをアプレットに変換する具体的な手順:

イベント処理

アプレットは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 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! "); }
}

このアプレットを以下のように呼び出します:

<html>
<title>Event Handling</title>
<hr>
<applet code="ExampleEventHandling.class" width="300" height="300">
</applet>
<hr>
</html>

最初、アプレットは"initializing the applet. Starting the applet."と表示されます。その後、長方形内をクリックすると"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();
            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つのメソッドがあります:

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

  1. Java演算子をマスター:種類、構文、実践例
  2. Javaコメント:種類、使い方、ベストプラクティス
  3. Java拡張forループをマスター:構文、例、ベストプラクティス
  4. Java文字列をマスター:生成、メソッド、ベストプラクティス
  5. Javaインターフェース完全ガイド:概念、実装、ベストプラクティス
  6. Java無名インナークラス完全ガイド:定義、構文、実践例
  7. Javaのtry-with-resourcesをマスターする:自動リソース管理の仕組みと活用法
  8. Javaアノテーション完全ガイド:種類、配置場所、実践例
  9. Javaアサーション完全ガイド:バグ早期発見とコード信頼性の向上
  10. Java Vectorの理解:使い方、特徴、ArrayListとの比較
  11. Javaアプレット入門:基礎と主要な違い