最近ちょっと話題になっているJavaFX とは
非Web系Javaプログラマ(あるいはJava SEプログラマ)から見たJavaFX 2.0とは新たなGUIライブラリです。Java標準のAWTおよびSwing、Eclipseが使用しているSWTなどと並ぶもので、得意分野はアニメーション、サウンド、動画、HTMLレンダリング機能といったところでしょうか。
このJavaFX、次のバージョンのJava SE 8に標準搭載される予定とのことです。AWT/Swingとは別にまったく新たに作られたライブラリなので、Java SE 8プログラミングにおいてはどっちのGUIを使うか?という選択が発生することになりそうです。
インストール
JavaFX 2.0.1 SDKが公開されています。上述のJavaFXホームページから[Download]を辿ってダウンロードします。直接行くには次のURLです。
http://www.oracle.com/technetwork/java/javafx/downloads/index.html
SDKのほかにRuntimeもありますが、SDKをインストールするとRuntimeも一緒にインストールされるのでプログラミングをするときはSDKのみインストールすればよいと思います。
JavaFXは、ネイティブライブラリを使用するので、Windows 32bit版、64bit版が別々に用意されています。Windows 64bit版を使用するときは、Javaも64bit版を使用する必要があります。
インストーラを実行するとインストール場所を聞いてきます。デフォルトはC:\Program Files\Oracle\JavaFX 2.0 SDK です。
Windows 7でのクラスパスTips
コマンドラインでJavaFXをコンパイル/実行する場合、JavaFXのJARファイルをクラスパスで指定する必要があります。デフォルトのインストール場所は空白が含まれるパスで、かつ長いので指定が面倒です。(ダブルクォートで囲む必要がある、など)
C:\work> java -cp "C:\Program Files\Oracle\JavaFX 2.0 SDK\rt\lib\jfxrt.jar";. Hello
Windows 7(Vista以降)では、mklinkコマンドでジャンクションおよびシンボリックリンクを作成する機能が用意されているので、これを使って短いパスで指定できるようにしておくと便利です。
C:\> mkdir java C:\> cd java C:\java> mklink /D "C:\Program Files\Oracle\JavaFX 2.0 SDK" javafx C:\java>
すると、少し短いパスで指定できるようになります。
C:\work> java -cp C:\java\javafx\rt\lib\jfxrt.jar;. Hello
Hello, world
JavaFXホームページから辿れるドキュメント"Getting Started with JavaFX"を見ながら、最初の一歩を踏み出してみます。
http://download.oracle.com/javafx/2.0/get_started/jfxpub-get_started.htm
最低限のJavaFXコード(空のウィンドウ)
次のコードは、空のウィンドウを表示するJavaFXプログラムです。
import javafx.application.Application; import javafx.stage.Stage; public class ColorfulCircles extends Application { @Override public void start(Stage primaryStage) { primaryStage.show(); } public static void main(String[] args) { launch(args); } }
JavaFXでは、Applicationクラスの継承と、mainメソッドからlaunchメソッドで起動するというやり方です。どっかで見たような構造だなぁと思ったら、JSR-296 Swing Application Frameworkでした。
さて、ここではアプリケーションを起動するApplicationクラスのlaunchメソッドと、GUIの実行の中心となるstartメソッド、およびその引数で画面表示に関係していそうなStageクラスが登場しています。
JavaFXのJavadoc でApplicationクラスを見ると、startメソッドはJavaFXアプリケーションスレッドで実行するとあります。JavaFXもスレッドモデルについてはAWT/Swing同様シングルスレッドポリシーを採用しているようです。Javadocの該当部分を以下に訳出してみました。
スレッディング
JavaFXはアプリケーションのstartメソッドを実行するほか、入力されたイベントの処理、アニメーションのタイムラインの実行に使用するアプリケーションスレッドを生成します。JavaFXのSceneやStageオブジェクトの生成は、シーングラフに組み込まれている有効なオブジェクトを修正する操作と同様必ずJavaFXアプリケーションスレッドで実行されなければなりません。Application(派生)クラスのコンストラクタおよびinitメソッドは、JavaFXアプリケーションスレッドではなく、プログラムの起動スレッド上で呼び出されます。よって、SceneやStageオブジェクトはコンストラクタおよびinitメソッドで構築してはならないということです。それ以外のJavaFXオブジェクトはinitメソッドの中で生成して構いません。
JavaFXのJavadocは、JavaFX 2.0 SDKをインストールした中に含まれます。
コンパイルと実行
C:\work> javac -cp "C:\Program Files\Oracle\JavaFX 2.0 SDK\rt\lib\jfxrt.jar";. ColorfulCircles.java C:\work> java -cp "C:\Program Files\Oracle\JavaFX 2.0 SDK\rt\lib\jfxrt.jar";. ColorfulCircles
実行すると、空白のウィンドウが表示されます。
続きはまた。