Scala + SBTでJavaFxを使う
Scala + SBTの環境でJavaFxを使って、単純に「Hello World」と表示させてみました。
まずは、SBTからアプリを実行させ、ウィンドウに「Hello World」と表示させます。
次に、ブラウザでこのアプリを表示させてみます。
作業ディレクトリ
今回は、HelloWorldFxというディレクトリの中で作業します。
SBTのダウンロード
次のURLからSBTをダウンロードしてきます。
SBTの現在の最新バージョンは、0.12.3でした。
今回は、ZIP形式をダウンロードしてきました。
そのZIPファイルを適当な場所に解凍します。解凍したディレクトリ中にあるbinディレクトリの中身をすべてHelloWorldFxディレクトリの中にコピーします。
ディレクトリ構成は、以下のようになりました。
$ ls -R .: classes jansi.jar sbt-launch-lib.bash sbt-launch.jar sbt.bat src win-sbt ./classes: SbtJansiLaunch.class ./src: main ./src/main: scala ./src/main/scala: Main.scala
SBTでJavaFxアプリのコンパイルに必要なJARファイル
SBTでJavaFxアプリをコンパイルするには、
jfxrt.jar
が必要です。
このファイルは、Javaがインストールされているディレクトリ(C:\Program Files\Java\jre7など)のlibディレクトリの中にあります。
Javaのインストール時にJavaFxが標準でついてくるのは、Java7の途中からだったと思うので、なければ最新のJavaをインストールする必要があります。
このjfxrt.jarをHelloWorldFx/libにコピーすれば、コンパイルは通るようになるはずです。
ソースコードの場所
ソースコードは、HelloWorldFx/src/main/scala/Main.scalaに作成します。
ウィンドウに「Hello World」と表示させるだけの単純なアプリです。
Main.scala
ウィンドウに「Hello World」と表示させるだけの単純なアプリです。
Main.scala
import javafx.application.Application import javafx.stage.Stage import javafx.scene.Scene import javafx.scene.layout.BorderPane import javafx.scene.control.Label class Main extends Application { override def start( stage:Stage ) { stage.setTitle("HelloWorld") stage.setScene(new Scene(new BorderPane { setCenter( new Label("Hello World") ) })) stage.show } } object Main { def main( args:Array[String] ) { Application.launch( classOf[Main], args:_* ) } }
コンパイル
コンパイルします。
$ ./sbt.bat compile
実行に必要な環境変数を設定する
コンパイルは通っても、これだけでは実行できません。
実行するには、$JRE_HOME/binにパスを通す必要があります。
実行
実行します。
$ ./sbt.bat run
ウィンドウに「Hello World」と表示されていれば成功です。
ブラウザで実行する
つぎに、ブラウザ上でアプリを実行させてみます。
用意するもの
- JARファイル:アプリのJARファイルと、scala-library.jarです。sbtで作る。
- JNLPファイル:デプロイ情報を記したXMLファイルです。javafxpackagerで作る。
- HTMLファイル:JavaScriptを記述したHTMLファイル。javafxpackagerで作る。
javafxpackagerは、Java SDKのインストールディレクトリのbinディレクトの中にあります。
このディレクトリへパスを通しておくと良いでしょう。
javafxpackagerを実行すれは、JNLPとHTMLファイルを作成してくれますが、
実行には、scala-library.jarとアプリのJARファイルが必要です。
アプリのJARファイルの作成
アプリのJARファイルは、sbtで簡単に作成できます。$ ./sbt.bat package
とすれは、HelloWorldFx/target/scala-<version>/に作成されます。
あとでjavafxpackagerで使いやすいように、作成されたjarファイルを
HelloWorldFx/src/main/resourcesにコピーしておきます。
scala-library.jarをコピー
scala-library.jarは、$HOME/.sbt/boot/scala-2.9.2/libにあります。
これも、HelloWorldFx/src/main/resourcesにコピーします。
JNLPファイルとHTMLファイルの作成
JNLPとHTMLを作成する準備が整ったので、javafxpackagerを使ってJNLPとHTMLを作成します。
オプションの「-srcdir」でHelloWorldFx/src/main/resourcesにあるファイルを指定します。
出力先は、「-outdir」で指定します。今回はsrc/main/webappにしました。
実行するmain関数のあるクラスを、「-appclass」で指定します。
$ javafxpackager -deploy -outdir "src\main\webapp" -outfile helloworldfx -width 100 -height 100 -name HelloWorldFx -appclass Main -v -srcdir src\main\resources
HTMLファイルがsrc/main/webappに作成されているはずです。
作成されたHTMLファイルをブラウザで表示させれば、完了です。
※セキュリティの設定でブラウザで表示できない場合もあります。そのときは、コントロールパネルからJavaのセキュリティ設定を変更してください。
0 件のコメント:
コメントを投稿