JavaFX の REPL は、まだちょっと。

JavaFX の REPL が使えるようになっています。
但し実際に使うには標準の JavaFX 1.2 SDK だけでは足りないので、以下のファイルが必要になります。

JLine は、ZIP を解凍すると、JAR が入っているので、それを CLASSPATH の通っている場所に配置するか、任意の場所に配置して CLASSPATH に通します。
 例: JAVAHOME/jre/lib/ext

javafxsh は、JavaFX 1.2 SDK のインストール場所の下の bin の下に配置します。
 例: c:/javafx-sdk1.2/bin

そして javafxsh を置いた場所を PATH に通しておきます。


ここまで完了したらコマンドプロンプトを起動して(Windows 以外の場合は シェルから)、javafxsh を実行すれば JavaFX Script をシェルのように実行することが出来ます。コマンド履歴も使えます。(JLine の機能)

C:\WORK>javafxsh
/*fx1*/ println("Hello")
Hello

行頭の /*fxX*/ はプロンプトです。(X は数字)

/*fx2*/ var a = Object{}
java.lang.Object@23756
/*fx3*/ var b = Object{}
java.lang.Object@f894ce
/*fx4*/ isSameObject(a, b)
false


途中で改行を入れて複数行にまたがらせるとエラーになってしまいます。

/*fx8*/ class Foo {
fx8:1: Sorry, I was trying to understand a 'class' declaration but I got confused when I hit the end of the script..
 Perhaps you are missing a '}'.

なので、一行に書かなければいけません。

/*fx23*/ class Foo { public var name; public function greet() { println("My name is {name}. Nice to meet you.") }}
/*fx24*/ var foo = Foo { name: "hide1080" }
fx23$Foo@1ef3a22
/*fx25*/ foo.greet()
My name is hide1080. Nice to meet you.


JavaFX なのでこんなことも出来ます。(意味があるかどうかは聞かないで)

/*fx1*/ import javafx.scene.Scene
/*fx2*/ import javafx.stage.Stage
/*fx3*/ Stage{ title: 'REPL'; scene: Scene{width: 200.0; height: 100.0;}}
javafx.stage.Stage@800aa1

表示された Stage

で、この Stage を閉じると...

/*fx4*/
C:\WORK>

javafxsh ごと終わってしまうという。
それから、Stage にもうちょっと載せてみようとしてこんなのを実行すると...

/*fx1*/ import javafx.scene.Scene
/*fx2*/ import javafx.stage.Stage
/*fx3*/ import javafx.scene.text.Text
/*fx4*/
/*fx5*/ Stage{ title: 'REPL'; scene: Scene{width: 200.0; height: 100.0; content: Text{x: 15.0; y: 50.0; con
tent: 'I love JavaFX!'; }}}

スレッドがデッドロックしますので、タスクマネージャか kill で殺してください。


でもって一通り遊んだ後の終わらせ方は FX.exit() で終わらせます。

/*fx21*/ FX.exit()

C:\WORK>

単に exit や quit と叩いて試してみましたが、終わってくれませんでした。せめて exit() で終わって欲しいもんです。exit() も javafx.lang.Builtins のメソッドに含めてしまえば良いのに。


さてさて、ちょろちょっろと試してみましたが、はっきり言ってしまうと、まだまだです。
仮にこれがまともに使えるようになったとして、RIA に特化した JavaFX をこれがどう活かせることが出来るかは、未だもって見えてません。
が、遊び道具を頂戴できるのは大歓迎なので、今後の改善と拡張に期待してます。