レッスン1

あなたのブラウザはJavaに対応していないか,それともJavaの機能を止めてあるようです。

上のようなJava言語で作った部品のことをアプレット(applet)といいます(小さなアプリケーションソフトという意味でしょうね)。

上のアプレットを作ってみましょう。

エディタ(メモ帳など)を起動して,次のように打ち込んでください。 ただし // から行末までは注釈(説明)ですので,打ち込まなくてもかまいません。


import java.awt.*;         // ウィンドウ関連ツール(Abstract Window Toolkit)を使う
import java.applet.Applet; // Appletを使う
import java.util.Random;   // 乱数を使う

public class Circles extends Applet {                // アプレットの名前は Circles にする
    public void paint(Graphics g) {                  // 描画手順は以下の通り
        Random a = new Random();                     // 新しい乱数列 a を用意する
        for (int i = 0; i < 100; i++) {              // 0 から 99 までループ
            g.setColor(new Color(a.nextInt()));      // 整数の乱数を発生し,それで色を決める
            int x = a.nextInt(300);                  // 整数の変数 x に0以上300未満の整数の乱数を代入する
            int y = a.nextInt(100);                  // 上と同様
            int r = a.nextInt(40) + 10;              // 上と同様
            g.fillOval(x - r, y - r, 2 * r, 2 * r);  // 中心 (x,y),半径 r の円板を描く
        }
    }
}

これを Circles.java というファイル名で保存します。 保存時の文字コード(エンコーディング)は,Windows なら(もし指定ができるなら)ANSI(実際はShift JISをマイクロソフトが拡張したMS932)とします。MacならShift JIS,LinuxやSolarisならEUC-JPでいいでしょう。

今は大丈夫だと思いますが,もしかしたら Windows の「メモ帳」で Circles.java という名前で保存しようとすると,Circles.java.txt という名前にされてしまうことがあるかもしれません。 ファイル名の欄に "Circles.java" のように引用符付きで書けばいいかもしれません。

コマンドを入力する窓(新しいWindowsなら「コマンドプロンプト」,古いWindowsなら「MS-DOSプロンプト」,Mac OS Xなら「ターミナル」)で次のように打ち込んでください。

javac Circles.java

すると,Circles.class というファイルができます。 この手続きを「コンパイル」といいます。 また,javac という命令で起動するソフトのことを「Javaコンパイラ」といいます。

この Circles.class と同じ場所に

<applet code="Circles.class" width="300" height="100">
</applet>

と書いたファイルを作ります。 このファイル名は何でもかまいませんが,例えば test.html としておきます。 次に,コマンドを入力する窓から,

appletviewer test.html

と打ち込みます。 ランダムな円がたくさん出力されれば OK です。

アプレットビューア初回起動時に「警告: AppletViewer プロパティファイルが読み込まれません: C:\Documents and Settings\hogehoge\.hotjava\properties デフォルトを使用します。」などと言ってきますが,これは正常です。

古いWindowsのMS-DOSプロンプトからアプレットビューアを起動しようとすると

This program cannot be run in DOS mode.

というエラーメッセージが出る場合は,MS-DOSプロンプトの [プロパティ]−[プログラム]−[詳細設定] で,「MS-DOSプログラムにWindowsを検出させない」のチェックボックスをオフにしてください。

さらに,この test.html というファイルをWebブラウザで開くと,ブラウザの窓に出力されるはずです。

ご自分のWebサイトを持っているかたは,この test.html に書き込んだのと同じ内容をご自分のWebページのどこかに書き込んでおき,それと同じフォルダに Circles.class を置いておけば,そのページを見た人のブラウザにランダムな円が出力されます。

Circles.class はバイナリファイルですので,FTPソフトでサーバに送るときは必ずバイナリ指定してください。

なお,ブラウザで見せる場合,見る人のパソコンに最新のJavaがインストールされているとは限りません。 そこで,例えば

javac -source 1.2 -target 1.1 Circles.java

のように,古いバージョンのJavaをターゲットにしてコンパイルしたほうがよいでしょう。

Javaにはバージョン1.1までの旧Javaと,1.2から始まる「Java 2」とがあります。 さらに拡張が行われた1.5はJava 2の「5.0」とも称されます(ややこしい)。 Mac OS X標準のものは1.4.xです(1.5も別途ダウンロードできます)。

ブラウザでJavaアプレットを表示する場合,[更新]([再読み込み])ボタンだけではアプレットの再読み込みができません。 Internet Explorer では Ctrl キーを押しながら[更新],Netscape では Shift キーを押しながら[再読み込み]を押してください。

Safari ではいったん command + Q で終了してから再度開いてください。 あるいは Java コンソールが前面に出ている状態で x キーを押して「クラスローダキャッシュの消去 ... 完了。」というメッセージが出たことを確認してから再読み込みしてください。 Java コンソールは /アプリケーション/ユーティリティ/Java の中の「プラグイン設定」で有効にできるほか,Java エラーの「×」印を右クリックしたメニューからも起動できます。

ブラウザによってはメニューから Java コンソールが出せます(例えば Tools -- Web Development -- Java Console)。

appletタグの代わりにobjectタグを使う方法については appletかobjectか をご覧ください。

なお,<applet>(または <object>)タグの中身に

<applet code="Circles.class" width="300" height="100">
あなたのブラウザはJavaに対応していません。
</applet>

のように書いておけば,Java対応でないブラウザではメッセージ「あなたのブラウザはJavaに対応していません」が出ます。また,

<applet code="Circles.class" width="300" height="100">
<img src="circles.png" />
</applet>

のように書いておけば,Java対応でないブラウザでは circles.png という図がアプレットの代わりに表示されます。


プログラムを少し解説しておきます。

import java.awt.*;
import java.applet.Applet;

は,ここでは

import java.awt.Graphics;
import java.applet.Applet;

でも同じことで,利用するクラスを列挙しています。 これがなくても,その下のプログラム中で Graphics となっているところをすべて java.awt.Graphics に変え,Applet となっているところをすべて java.applet.Applet に変えれば同じことです。

g.setColor(new Color(値)); は色を決めています。 値は 0x00FFFF のように16進RGBで書けます。 ここでは乱数で指定しています(下位24ビットだけしか使われません)。 Color.gray とか Color.yellow のような名前も使えます。

<applet code="..." width="300" height="100"> のように与えた幅と高さをアプレット中で取得するには,getSize().width および getSize().height を使います。 つまり,次のようにできるわけです:

int x = a.nextInt(getSize().width);
int y = a.nextInt(getSize().height);

奥村晴彦

Last modified: 2006-01-06 13:18:44