JavaアプリケーションのHello World

第7回は、Javaで書いたHello Worldです。Javaのプログラムは、JavaアプリケーションとJavaアプレットに分けて考えることができます。JavaアプレットはWebブラウザ上で実行されるプログラムですが、JavaアプリケーションはOS上からコマンドとして起動されるプログラムです。

JavaアプリケーションのHello Worldは、リスト1のように、print()メソッドを使って文字列を出力すればOKです。このように、Javaアプリケーションはmain()メソッドから実行が開始されます。System.outは標準出力を意味します。なお、print()では改行コードは付加されないため、文字列の終端に"\n"を付けておきます。

リスト1 printを使う方法(JavaApplicationPrint.java)

public class JavaApplicationPrint {           ← クラスの定義を開始
  public static void main(String[] args) {    ← main()メソッド開始
    System.out.print("Hello World\n");        ← print()でメッセージ出力
  }
}

リスト2のように、print()の代わりにprintln()メソッドを使えば改行コードが付加されるため、文字列に"\n"を付ける必要はありません。

リスト2 printlnを使う方法(JavaApplicationPrintln.java)

public class JavaApplicationPrintln {
  public static void main(String[] args) {
    System.out.println("Hello World");        ← println()なら改行コードは不要
  }
}

Javaのプログラムは、実行例1のようにjavacコマンドを使ってコンパイルします。コンパイルに成功すると、「拡張子.class」のクラスファイルが作成されます。Javaアプリケーションの実行にはjavaコマンドを使い、引数にクラス名(拡張子.classは付けない)を指定します。

実行例1 Javaのプログラムのコンパイルと実行

$ javac JavaApplicationPrint.java   ← javacで、Javaのソースをコンパイル
$ ls *.class                        ← 拡張子.classのファイルを確認
JavaApplicationPrint.class          ← 確かにコンパイルされている
$ java JavaApplicationPrint         ← javaコマンドを使ってクラスファイルを実行
Hello World                         ← 確かにHello Worldが表示される
$                                   ← シェルのプロンプトに戻る

GUIのJavaアプリケーション

Javaアプリケーションは、テキストベースでの動作だけでなく、ウィンドウベース(GUI)でも動作します。リスト3はGUIのJavaアプリケーションです。このプログラムをjavacでコンパイルし、javaコマンドでクラスファイルを実行すると、図1のようなウィンドウが立ち上がるはずです。メッセージはウィンドウの中に表示されます。ウインドウタイトル部分に表示されているHello Worldは、フレームのタイトル文字列です。

なお、このプログラムには終了のためのコードがないため、コマンドラインに[Ctrl]+[C]を入力するなどして終了してください。

リスト3 GUIのJavaアプリケーション(JavaGuiHello.java)

import java.awt.*;                           ← GUIを使うために必要

public class JavaGuiHello {
  public static void main(String[] args) {
    Frame f = new Frame("Hello World");      ← フレームを作成(タイトル付き)
    f.setLayout(new FlowLayout(FlowLayout.CENTER, 0, 30));  ← ほぼ中央に配置
    f.setSize(200, 100);                     ← フレームのサイズを指定
    f.add(new Label("Hello World"));         ← ラベルでメッセージを貼り付ける
    f.setVisible(true);                      ← フレームを可視状態にする
  }
}

図1 GUIのJavaアプリケーション

Javaアプレットの場合

JavaアプレットのHello Worldはリスト4のとおりです。このように、Javaアプレットのプログラムにはmain()がありません。メッセージは、paint()メソッドの中でdrawString()を使って描画します。

リスト4 Javaアプレットの場合(JavaAppletHello.java)

import java.applet.*;                          ← アプレットを使うために必要
import java.awt.*;                             ← GUIを使うために必要

public class JavaAppletHello extends Applet {  ← Appletクラスを継承
  public void paint(Graphics g) {              ← paint()メソッド開始
    g.drawString("Hello World", 60, 50);       ← メッセージを描画(座標も指定)
  }
}

Javaアプレットを実行するためには、HTMLファイルが必要です。最低限の記述を行ったHTMLファイルはリスト5のとおりです。このように<applet>タグを使い、その属性値でクラスファイルと表示サイズを指定します。

リスト5 JavaアプレットのためのHTMLファイル(JavaAppletHello.html)

<applet                            ← <applet>タグ開始
  code="JavaAppletHello.class"     ← code属性でクラスファイルを指定
  width=200 height=100>            ← width/height属性で表示サイズを指定
</applet>                          ← <applet>タグ終了

このHTMLファイルを、Webブラウザまたはappletviewerコマンド(実行例2)で開けば Javaアプレットが実行されます(図2)。

実行例2 appletviewerでJavaアプレットを実行

$ appletviewer JavaAppletHello.html   ← コマンドラインからappletviewerを実行

図2 appletviewerによるJavaアプレットの表示

Javaアプリケーション兼アプレット

プログラムを工夫することにより、JavaアプリケーションとしてもJavaアプレットとしても動作するようにすることができます(リスト6)。このプログラムは、Javaアプレットとして起動された場合はpaint()メソッドのみが実行され、通常のJavaアプレットとして動作します。Javaアプリケーションとして起動された場合は、まずmain()メソッドが実行され、この中で自分でアプレットを作成し、サイズを指定して画面表示を行っています。

なお、Javaアプレットとして起動する場合は、通常のJavaアプレットと同様にHTMLファイルが必要です。

リスト6 Javaアプリケーション兼アプレット(JavaGuiApplet.java)

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

public class JavaGuiApplet extends Applet {
  public void paint(Graphics g) {            ← Javaアプレットのpaint()
    g.drawString("Hello World", 60, 50);     ← メッセージを描画
  }

  public static void main(String[] args) {   ← Javaアプリケーション用main()
    Frame f = new Frame("Hello World");      ← フレームを作成
    Applet a = new JavaGuiApplet();          ← 自分でアプレットを作成
    f.setSize(200, 100);                     ← フレームのサイズを指定
    f.add(a);                                ← フレームにアプレットを貼る
    f.setVisible(true);                      ← フレームを可視状態にする
  }
}