FXEvaluator

JavaFX ではスクリプトを動的に評価することのできる FXEvaluator クラスがあります。

使い方は簡単。

    FXEvaluator.eval("println('Hello, World!');");

のように記述します。

このスクリプトは JavaFX 1.2 でも正常に動作するのですが、ちょっと複雑なスクリプトにするとコンパイルができないと例外が投げられます。

var script = "import javafx.scene.*;\n"
"import javafx.stage.*;\n"
"Stage \{\n"
"    scene: Scene \{\n"
"        width: 100\n"
"        height: 100\n"
"    \}\n"
"\}\n";

FXEvaluator.eval(script);

このスクリプトを実行すると、以下のようなメッセージが出力されます。

An exception has occurred in the OpenJavafx compiler. Please file a bug at the Openjfx-compiler issues home (https://openjfx-compiler.dev.java.net/Issues) after checking for duplicates. Include the following diagnostic in your report and, if possible, the source code which triggered this problem.  Thank you.
java.lang.AssertionError
        at com.sun.tools.javac.jvm.Gen.visitBreak(Gen.java:1631)

        ...以下、省略...

スクリプトの長さでコンパイルできたり、できなかったりというのは、明らかにおかしい。もちろん、実行時には javafxc.jar をクラスパスに加えてあります。

JavaFX 1.1 だと正常に実行できたんだけどなぁ...

もしかしたら、他の JAR ファイルをクラスパスに追加する必要があるのかもしれません。

id:hide1080 さんによると REPL は動いているみたいなのですが、なぜ FXEvaluator は動かないのだろう? 不思議だ。

openjfx-compiler の ML に質問してみたのですが、今のところ反応はなし。

さて、どうしたものか...