SWT
SWT
SWT(Standard Widget Toolkit)とは、IBM社が推進している統合開発環境「Eclipse」で使用されているウィジット(ボタン・チェックボックス・メニューなど)・ウィンドウ・イベントなどを制御する、ツールキット(JavaのAPI群)です。といっても、「Eclipse」「SWT」共に、無料で利用できます。CPL(Common Public License)というライセンスで配布されており、これは GPLなどのオープンソースと異なり、ソース公開の義務や商用利用での制約などはありません。自分で作ったSWTの機能を使用したアプリケーションを販売、とかもできるのです。もちろん、フリーソフトの制作にも使えます。
Javaでは、標準のGUI制御機能として「Swing」が提供されていますが、これはJavaだけでできているため動作速度に難があります(それでも、バージョンを重ねるごとに確実に速度アップしてきてますが)。ところが、SWTはJavaの機能を提供するにもかかわらず、C/C++言語で作ったアプリケーションに迫る速度を出しています。これは、SWTがOS依存のAPIを直接呼び出しているためです。「Write Once,Run Anywhere」(一度書けばどこでも動く)というJavaのコンセプトは崩れるのですが、 OS依存の機能を呼び出すことにより、軽快な速度を引き出すことができています。
SWTは、「http://www.eclipse.org/」からダウンロードできます。Ver2.1では、以下のOSに対応しているようです。
Windows 98/ME/2000/XP Linux(x86/Motif) Linux(x86/GTK2) Solaris 8(SPARC/Motif) QNX(x86/Photon) AIX(PPC/Motif) HP-UX(HP9000/Motif) Mac OSX (Mac/Carbon)
Javaアプリケーションを作るために使う機能ですので、Java(J2SE) 1.3以上が必要になります。2003年4月現在は、SWT 2.1の場合、J2SE 1.4.1を入れるといいでしょう。Javaは、「http://java.sun.com/」より「J2SE」をインストールするようにしてください。また、環境変数のPATHには、Javaインストールディレクトリの「bin」を通すようにしてください。これで、コマンドラインのカレントディレクトリがどこであってもJavaをコンパイル・実行することができるようになります。
- J2SE・JREって?
- J2SEとは、クライアント向けのJava2 SDK(開発キット)です。J2SEには、JRE(Java Runtime Environment)も含まれます。JREとは、Javaを実行するだけのプログラム群です。例えば、システムの導入先に対し、Javaアプリケーションを入れたい場合などは 開発キットはいらないですので、JREとJavaアプリケーション本体のみを 入れるとJavaアプリケーションが動作することになります。JREも「http://java.sun.com」よりダウンロードできます。
さて、Javaの動作確認はコマンドラインで以下のように行います。
java -version
これで、以下のようにJavaのバージョンが表示されます。もちろん、OSやJavaのバージョンによって表示は異なることになります。
java version "1.4.1_01" Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.1_01-b01) Java HotSpot(TM) Client VM (build 1.4.1_01-b01, mixed mode)
今度は、SWTをインストールします。インストールというよりも、解凍して必要なファイルを取り出すことになります。SWT 2.1のWindows版の場合、「swt-2.1-win32.zip」を解凍すると、以下のようなものが展開されます。
about.html swt-win32-2133.dll swt.jar swtsrc.zip
このうち、「swt-win32-2133.dll」がJavaと各OSのネイティブコードをつなぐモジュールとなります。これは、OSによって異なります。「swt.jar」が、SWTのJavaのパッケージとなります。この2つが、SWTのアプリケーション開発時と実行時に必要です。(開発時には、DLLは参照されないのでいらないのですが)
DLLファイルは、SWTを使ったJavaアプリケーション実行時に参照される(PATHが通っている)場所か、実行するJavaアプリケーションのあるディレクトリと同じ場所に置きます。他OSの場合は、DLLの代わりにsoを実行時に参照される場所に置くといいです。
一番簡単なSWTのプログラムをコンパイルしてみましょう。ウィンドウを出すだけのものです。
[swtTest.java]
import org.eclipse.swt.widgets.*; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.*; public class swtTest { public static void main(String argv[]){ Display display = new Display(); Shell shell = new Shell(display); //ウィンドウのタイトルを指定 shell.setText("swtTest"); FillLayout layout = new FillLayout(SWT.VERTICAL); shell.setLayout(layout); Label label = new Label(shell,SWT.BORDER); label.setText("Hello World!!"); //ウィンドウのサイズを指定 shell.setSize(300,100); //イベントループ shell.open(); while (!shell.isDisposed()){ if (!display.readAndDispatch()){ display.sleep(); } } //破棄処理 display.dispose(); } }
これを、以下のようにコマンドラインでコンパイルします。まずは、ソースのあるディレクトリに移動してください。なお、この例では「swt.jar」「swt-win32-2133.dll」はソースである「swtTest.java」と同じディレクトリに配置しています。
そして、以下のように指定すると、 カレントにある「swt.jar」を参照する形で「swtTest.java」をコンパイルする、ということになります。
javac -classpath ./swt.jar swtTest.java
これで、何もエラーメッセージが出なければ無事にコンパイル完了です。「swtTest.class」というファイルが生成されます。
実行は、以下のように指定します(Windowsの場合)。これは、カレントにある「swt.jar」とカレントディレクトリ自身を参照して、swtTestを実行する、ということになります。
java -classpath ./swt.jar;. swtTest
ここで「-classpath」の「./swt.jar;.」は、カレントの「swt.jar」と 「.」(カレントディレクトリ自身)を参照する、という指定になります。「;」セミコロンが区切りのセパレータです。なお、Windows以外のOSの場合は、このセパレータが「:」コロンとなりますのでご注意ください。
これで、「Hello world!!」と表示されたウィンドウがあらわれます。
Future's Laboratory 技術格納庫 2004-2013 Yutaka Yoshisaka.