ダブルクリックで実行

javaの実行のしくみ

ワープロや表計算などWindowsで普通に使用されているプログラムはC言語(C++)で書かれ、Cのコンパイラでコンピュータが直接実行できる形になおされています。Javaのコンパイラ(javac.exe)はクラスファイルを作りますがこれは実行形式でなくjava.exeが.classの内容を読み込んで実行することになります。このため実行速度はどうしても不利です。

Cプログラム  →コンパイラ→     実行ファイル(.exe)
Javaプログラム →コンパイラ(javac)→ クラスファイル(.class)
        →インタープリタ(javaこれは実行ファイル)が読み込んで実行

また、実行にあたりDOSプロンプトからコマンドをキーボードで打たなければならないのもGUIの流れに反しています。(コマンド方式の操作も慣れると使いやすいのですが、Windowを利用するソフトがコマンドから起動されるのはちょっと…)

ダブルクリックで実行されるようにする

これを一般の実行ファイルと同様の使用感を持たせることができます。例としてWa2.javaについてやってみます。

(1)Wa2.javaをコンパイルすると、Wa2.class と Wa2$MyJPanel.class ができます。これは、Wa2.javaの中にクラスの定義がが2つあるからです。Wa2 と MyJPanel です。

(2)次の内容のテキストファイルを作り、適当なファイル名で保存します。この例ではWa2.txtとしました。このファイルをマニフェストファイルと呼びます。

Main-Class: Wa2

この中の Wa2は実行するmainを含むクラス名です。いままで 「 java クラス名 」 で実行していたクラス名を書きます。

最後は必ず改行します。K2Editorでは[EOF]が次の行にくるようにします。

(3)jarコマンドで次のように命令します。

U:\java> jar cvfm Wa2.jar Wa2.txt Wa2.class Wa2$MyJPanel.class

次のような意味です。

cvfm
オプション
c:新規に作成する
v:逐次報告をする 指定しないと黙って仕事をします
f:jarファイル名の指定をする(正確には指定する名前のファイルに書き出す)
m:マニフェストファイルの指定をする
Wa2.jar
作成するjarファイル名
Wa2.txt
マニフェストファイル名 (2)でつけた名前とあわせます
Wa2.class Wa2$MyJPanel.class
使用するclassファイルのリスト

以下のように表示され Wa2.jar というファイルができます。

U:\java> jar cvfm Wa2.jar Wa2.txt Wa2.class Wa2$MyJPanel.class
マニフェストが追加されました。
Wa2$MyJPanel.class を追加中です。(入 = 1665) (出 = 941)(43% 収縮されました)
Wa2.class を追加中です。(入 = 654) (出 = 459)(29% 収縮されました)
U:\java>

(4)Wa2.jarをダブルクリックすると実行できます。

しくみ

jarというのはもともとファイルを圧縮してまとめる「アーカイブソフト」のひとつです。

U:\java> jar cvf matome file01 file02 file03 …

これで matome というファイルに、file01 file02 file03 … が圧縮されてひとまとめにされます。

中身を調べるには、

U:\java> jar tvf matome

解凍して元に戻すには

U:\java> jar xvf matome

この中にマニフェストファイルがあります。 META-INF/MANIFEST.MF ここに実行すべきクラス名を書いておくのが、マニフェストファイル名の指定です。このファイルはそのまままとめられるのではなく、その内容を読み込んで、META-INF/MANIFEST.MF というファイルの中に書き加えられるのです。

ダブルクリックすると、.jar という拡張子が javaw.exe というプログラムに関連づけられていて、javaw.exe に読み込まれて実行されます。従って、 Java 2 SDK, Standard Edition(JavaSDK)または、JavaREと呼ばれる実行環境がインストールされていないと実行できません。

おまけ

全部を呼び出すことで、一度に実行できます。部品としての再利用のしやすさを実感できます。

public class Call{
  public static void main(String[] args){
    Swing01 Obj01 = new Swing01();
    PanelTest Obj02 = new PanelTest();
    PanelTest2 Obj03 = new PanelTest2();
    PanelTest3 Obj04 = new PanelTest3();
    ButtonTest Obj05 = new ButtonTest();
    ButtonTest2 Obj06 = new ButtonTest2();
    EventTest Obj07 = new EventTest();
    TwoButtons Obj08 = new TwoButtons();
    UpDown Obj09 = new UpDown();
    ColorSelect Obj10 = new ColorSelect();
    CatText Obj11 = new CatText();
    Wa Ob12 = new Wa();
    Wa2 Ob13 = new Wa2();
    Tool Ob14 = new Tool();
  }
}
もくじ

聖愛高等学校
http://www.seiai.ed.jp/
Last Modified