簡単なGUI作品制作例 電卓 ステップ7(executable化)

これまで作成してきた電卓を、 ダブルクリックで実行可能な次一つのファイルにまとめます。
これは作品に必要なJavaのクラス群と、 どのクラスのmainから実行するかを指示したファイルを 適正にまとめて圧縮し、 拡張子を .jar にしたファイルです。
それにより、正しくJava Runtime(JRE)がインストールされていれる環境で、 ダブルクリックなどのアプリケーション起動操作で実行できるファイルになります。 その作り方を示します。

まず、複数のクラスのどのmainをスタートにするか? を指定するテキストファイルを作ります。 このファイルはマニフェストファイルと呼ばれ、 他にも署名などのセキュリティと構成情報を記憶させることがあります。
ここでは、次のように2つのフィールドだけを指定します。

Main-Class: work.SimpleCalculator
Class-Path: calculator.jar .

(このファイルはメモ帳などで、manifest.txtの名前で作成します。 :の直後は半角スペースであることに注意)
Main-Class: の直後が、スタートに使うmainのクラス名です。
また、Class-Path: の直後で、 『calculator.jar .』と指定していますが、 calculator.jarが、作成予定の圧縮ファイル名で、 スペース後の『.』が、 この圧縮ファイルのルートを、 クラスファイルの検索ルート(パッケージのルート)に指定しています。 マニフェストファイル(jar仕様)の詳細は次のリンクを参照ください。 →

さて、 圧縮する作業用で『temp』の名前のディレクトリを使った例で示します。 そこで、カレントディレクトリに『temp』ディレクトリを次のように作成します。

このディレクトリにクラスファイルをまとめ、クラス検索用ルートにします。
それには次のように、-d temp のオプションでコンパイルします。(カレントディレクトリがD:\javaの例を示します。)

D:\java>javac -d temp work\SimpleCalcPanel.java
D:\java>javac -d temp work\NomalCalcPanel.java
D:\java>javac -d temp work\SimpleCalculator.java

これで『temp』の中に、翻訳したクラスファイルがパッケージと共に作成されます。
なおオプションで -d を指定した場合、 指定したソース内部で利用するクラスのファイルを、自動的にコンパイルできません。 よって、上記のように個別でファイルをコンパイルする必要があります。 次のようにワイルド文字を指定することで、 同一パッケージ内の全てのソースを一括コンパイルすることも可能です。
D:\java>javac -d temp work\*.java

そして、先ほど作成した『manifest.txt』もこのtempの中にコピーします。
そしてJDKのjar圧縮コマンドでtemp内容を圧縮したcalculator.jarのファイルを、 次の指定で作成します。(jar だけ入力すると簡単な使い方が表示されます。)

D:\java>jar cmvf temp/manifest.txt calculator.jar -C temp/. .
マニフェストが追加されました。
work/ を追加中です。(入 = 0) (出 = 0)(0% 格納されました)
work/SimpleCalcPanel.class を追加中です。(入 = 4281) (出 = 2155)(49% 収縮されました)
work/SimpleCalculator.class を追加中です。(入 = 1791) (出 = 1024)(42% 収縮されました)
work/NomalCalcPanel.class を追加中です。(入 = 3156) (出 = 1697)(46% 収縮されました)
manifest.txt を追加中です。(入 = 63) (出 = 54)(14% 収縮されました)

D:\java>

cmvf のオプションの順番で c で新規jar作成指定、 mで直後がマニフェストファイル名、 vで詳細表示指定、 fで作成jarのファイル指定、 最後の『-C temp/. .』で指定のtempディレクトリに変更し、 以下のファイルを取り込んだ圧縮ファイルを作成する指定です。 以上で、ダブルクリックで実行できるcalculator.jarが作成されるでしょう。
(『temp』のフォルダは作業用なので削除しておくとよいでしょう。)
jarコマンド詳細を下記リンクで調べてみましょう。(太文字部分のリンクから辿れます)

以上で、作成作成された『calculator.jar』は、ダブルクリックで起動できるようになりますが、 System.out.printlnなどの表示はできなくなります。デバックなので、この標準入出力を利用したい場合、 javaのコマンドで、次のように-jarオプションで起動ができ、 この場合は標準入出力が可能となります。以下に例を示します。

D:\java>java  -jar  calculator.jar

D:\java>

なお一連の処理のコマンド入力を毎回行うのが大変なので、 次のようなバッチファイル内にプログラムするとよいでしょう。 そうすればバッチファイルの起動だけで作成できます。

これは、workパッケージだけを使う作品のバッチファイル例で、 mainがあるクラスファイルと同じ名前のSimpleCalculator.jarファイルを作成します。

作成されたSimpleCalculator.jarで、 その中のアプレットを表示させることも可能です。 このタグは次のようになります。(code= の代わりに、archive=でjarファイルを指定します。)

<applet archive="SimpleCalculator.jar" code="work.NomalCalcPanel.class" Width="250" Height="250" >
</applet>

NomalCalcPanelが正しくJAppletの継承クラスに 作ってあれば、このタグで次のように表示し、実行できるでしょう。
 ←SimpleCalculator.jar内のアプレットです。ダウンロードすればローカル作品として動作します。

なお、上記バッチファイルを以下に示します。 ■■■■の4箇所を変更すれば、他の作品でも使えるでしょう。 JDKのインストール先が『C:\dk1.5.0』で、 ソースファイル全てが『work』のパッケージにあるとして、 mainがあるクラスの名が『SimpleCalculator』である場合のバッチファイルを とします。作成に使う作業ディレクトリ名を『temp』として完成させましょう。
(完全に一致しないと正解になりません。余計な入力をしないでください)

←正しく修正してからクリックください。

←わからない場合は、クリック