!!!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!!」と表示されたウィンドウがあらわれます。