05 May 2008

EclipseでJava SWTアプリケーション作成

EclipseでSWTライブラリを用いたアプリケーションを作るためのセットアップ方法。

Eclipse 4.4時点での情報アップデート

2015年3月に、このページの末尾に情報追加した。

Eclipse 3.3時点での情報

最新のEclipse 3.3系では、SWTライブラリを使った開発がスムースに行える設定にはなっていない。(3.2までは、標準でSWTアプリケーションが開発できた)

SWTライブラリを使ったアプリケーションを実行しようとすると、SWTライブラリが発見できないため、次のようなエラーが出る。


[root@localhost bin]# java HelloJavaSwt
Exception in thread "main" java.lang.NoClassDefFoundError: org/eclipse/swt/widgets/Composite

[root@localhost bin]# java -jar HelloJavaSWT.jar
Exception in thread "main" java.lang.NoClassDefFoundError: org/eclipse/swt/widgets/Composite

LinuxとWindowsで共通の対処方法は…


1.SWTライブラリのプラグインをインストール

SWTライブラリのプラグインがインストールされていない場合、インストールする必要がある。(3.3系の”Eclipse IDE for Java Developers”ではインストールされていなかった)

※ インストールされているかどうかのチックは…

Linuxの場合は /usr/lib/eclipse/plugins 配下に swt ディレクトリがあるか確かめる

※ SWTライブラリのプラグインの入手

Eclipseのホームページ → DOWNLOADS → By Project → Eclipse PlatformRelease Build: 3.3.2 とページをたどって行って、” SWT Binary and Source”の項目からWindowsやLinux用のパッケージをダウンロードする。

Windowsの場合は、swt-3.3.2-win32-win32-x86.zip
Linuxの場合は、swt-3.3.2-gtk-linux-x86.zip などをダウンロード。

Linuxの場合は、ファイルを解凍して /usr/lib/eclipse/plugins 以下にコピーする。(ディレクトリ名は、適当でよい)

2.ユーザライブラリの登録

この項目は必ずしもやる必要性はない。個別のプロジェクトごとにライブラリを参照させることも可能。その場合は、3.に進む。

Eclipseのウィンドウ メニュー → 設定 を開く。
Java → ビルド・パス → クラスパス変数を選択し、「新規」ボタンで新規のパス変数を定義する。「名前:SWT、パス:SWTプラグインをインストールしたフォルダを指定」。

20080505-swt-groblib01.png

Java → ビルド・パス → ユーザ・ライブラリを選択し、「新規」ボタンでライブラリ名「SWT」を登録。さらに、「JARファイルの追加」ボタンを押し、SWTプラグインフォルダにあるswt.jarファイルを追加。

ここからはオプションだが、ユーザ・ライブラリで追加された項目を開いて、Javadocに”http://download.eclipse.org/eclipse/downloads/documentation/2.0/html/plugins/org.eclipse.platform.doc.isv/reference/api/”を設定すると、編集中に関数の上でShift-F2を押すと関数のヘルプが見られるようになる。

20080505-swt-groblib02.png


3.Eclipseで、新規プロジェクト(Java)を作成

新規プロジェクト作成時に、追加するソースコードのパスやライブラリのファイル名を指定することもできるが、今回は、ここでは名にも指定せずに空のプロジェクトを作成する。

4.ソースコード・パスとライブラリの追加

画面左のPackageペインのプロジェクト名を右クリック

20080505-swt-packages.png
(この画面は、SWTライブラリが追加された後のもの」

表示されたコンテキストメニューの一番下、Propertiesをクリック

左側のリストの Java Build Path を選択。

※ ユーザライブラリの登録(2.)をしなかった場合は、
Sourceタブを選択し、Link Sourceボタンを押して、先ほど解凍した SWT ライブラリのパスを指定する。(指定すると、ソース・パス以下のすべてのファイルが、プロジェクトの bin ディレクトリにコピーされるようだ)

ソース・パスを設定した後の画面は次のとおり

20080505-swt-addsrc.png

※ ユーザライブラリを登録(2.)をした場合も、しなかった場合も、
Librariesタブを選択し、(ユーザライブラリを登録しなかった場合は) Add JARsボタンを押して、先ほど追加したSWTソースの中より、swt.jar を探して選択する。
(ユーザライブラリを登録している場合は) ライブラリの追加ボタンを押して、ユーザライブラリを追加する。

ライブラリでswt.jarを設定した後の画面は次のとおり

20080505-swt-addlib.png


5.Eclipseでソースコードを作成

Fileメニュー - New - Class で新規クラスを追加する。
クラス名は適当に付け、"public static void main(String args[])" のチェックボックスにチェックを付けて実行する。

入力するソースコードは次のとおり


// SWTライブラリのインポート
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.*;

public class HelloJavaSwt {

public static void main(String[] args) {
// TODO Auto-generated method stub
Display display = new Display();

Shell shell = new Shell(display);
shell.setText("Java SWT Window"); // ウインドウのタイトル
shell.setSize(320, 200); // ウインドウのサイズ

// ラベルの定義
Label label = new Label(shell, SWT.NULL);
label.setText("Hello SWT");
label.setBounds(0, 0, 200, 50); // 表示位置 x=0, y=0, サイズ 200x50

shell.open();

// ウィンドウが破棄されるまでループ
while (!shell.isDisposed())
{
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
}

6.Eclipseで実行

20080505-swt-exec.png

まあ、普通に実行できます。こんな形のウインドウが作成されます。

7.Jarパッケージの作成

EclipseのFileメニュー - Export メニューを実行。

出力形式を "JAR ファイル" とし、次の画面では出力するJARファイルのフルパスを指定し、最後の画面で、エントリポイント(main関数)があるクラスを指定する。(最後のは忘れやすい)

8.コマンドラインでの実行

最初に書いたように、エラーが出ます。JARファイルの内部(jar xvf [file] で解凍)を見ても、特に問題あるようには…

9.Eclipseでデバック実行して、起動オプションを探る

デバッグ中に、実行中のクラスのプロパティを見ると、起動オプションが表示される。

20080505-swt-debug.png

swt.jar のライブラリ・パスが、「classファイルと同一ディレクトリ」ではなく、「プロジェクトで設定しているライブラリ・パス」となっている。

カレント・ディレクトリにもswt.jarがあるので、そちらを指定することにすると、起動は次のように行えばよいことになる。


[root@localhost bin]# java -classpath ./:./swt.jar HelloJavaSwt

jar の場合は、jarファイル内部のMANIFEST.MFファイルを編集して解決することができる。詳細は → こちら

Eclipse 4.4時点での情報

Eclipse 4.4時点でもSWTライブラリは標準では読み込まれないので、次の方法で手動で追加およびjarへのエクスポートをする必要がある。

SWTライブラリの入手

Eclipse SWT公式配布ページ『SWT: The Standard Widget Toolkit』から、開発環境(実行環境)にあったライブラリをダウンロードし、適当な場所に展開する。

今回は、/usr/local/eclipse/pluginsディレクトリにswtサブディレクトリを作成し、そこにライブラリ一式を展開した。展開されたファイルは次のようなものだ。

$ ls -lF /usr/local/eclipse/plugins/swt/
-rw-r--r-- 1 root users   18732 2014-02-21_17:28:26 about.html
drwxr-xr-x 2 root users    4096 2014-02-21_17:28:26 about_files/
-rw-r--r-- 1 root users 2026054 2014-02-21_17:28:24 src.zip
-rw-r--r-- 1 root users 2342965 2014-02-21_17:27:42 swt-debug.jar
-rw-r--r-- 1 root users 1728296 2014-02-21_17:28:12 swt.jar

プロジェクトにswtライブラリとjavadocを設定

プロジェクトのプロパティを開き、『Javaのビルド・パス』にてSWTのjarファイルと、javadocのzipファイルを登録する。まず、『外部jar追加』で先ほど展開したswt.jarファイルを追加する。

20150404-eclipse-swtjar.jpg
swt.jarを追加

さらに、追加されたswt.jarのプロパテイを開いて『ソース添付』に先ほど展開したソースコード src.zip を指定する。ソース添付すると、エディタでjavadocが表示されるほか、コードアシスト(自動補完)も受けることができる。

20150404-eclipse-swtjvadoc.jpg
SWTソースコードの添付

SWTライブラリを含んだjarを作成する

プログラムの開発が完了したら、SWTライブラリを含んだjarファイルを作成する。ファイル・メニューのエクスポートを選択して、『実行可能jarファイル』のエクスポートを選択する

20150404-eclipse-swtexport1.jpg
実行可能jarファイルのエクスポート

さらに、次の画面で『生成されるjarに必須ライブラリをパッケージ』を選択すれば、SWTライブラリもjarファイルに含まれることになる。(『隣のサブフォルダーに必須ライブラリをコピー』を選択すれば、外部ライブラリを別ファイルに保存してくれるため、LinuxからWindowsなどクロスコンパイル時にライブラリ差し替えに便利だ)

20150404-eclipse-swtexport2.jpg