2

JavaScripting API (Rhino) を介して JavaScript から JavaFX 2 を使用して実験しています。

注: これはリッチ クライアントに関する質問であり、Web プログラミングとは関係ありません。

JavaFX リッチクライアント アプリケーションの一部を動的スクリプトで調整したいと考えています。JavaScript ランタイム (Rhino) がバンドルされた JavaScripting API が私の要件に適したアプローチであるかどうかを評価しています。

そこで、私の最初の試みは、JavaScript を使用して単純な JavaFX-GUI を作成することでした。

print('Starting...')

importPackage(Packages.javafx.scene);
importPackage(Packages.javafx.scene.layout);
importPackage(Packages.javafx.stage);
importClass(Packages.javafx.scene.layout.StackPane);
importClass(Packages.javafx.scene.Scene);
importClass(Packages.javafx.stage.Stage);

myroot = new Packages.javafx.scene.layout.StackPane();
myscene = new Packages.javafx.scene.Scene(myroot);
mystage = new Packages.javafx.stage.Stage();
mystage.setScene(myscene);
mystage.show();

次に、このスクリプトを jsrunscript で実行しています。このスクリプトのインスピレーションは、Oracle のドキュメントから得られました。

ただし、スクリプトは 4 行目で既に失敗しています。

> ☹ jrunscript -f script.js                                             
> Starting...script error in file script.js :
> sun.org.mozilla.javascript.internal.EvaluatorException: Function importClass must be called with a class; had "[JavaPackage javafx.scene.layout.StackPane]" instead. (script.js#4) in script.js at line number 6

JavaFx パッケージ/クラスを JavaScript ランタイムにインポートできないようです。オラクルのドキュメントには、java.awt でこれが記載されていますが。

私は何を間違っていますか?

4

1 に答える 1

2

JavaScript コード化された JavaFX スクリプトを実行するコマンドでNashorn スクリプト エンジンを使用することをお勧めします。jjs -fx

  • Nashorn は、Rhino よりもはるかに最新の JavaScript エンジンです。
  • Nashorn には、JavaFX JavaScript スクリプトを起動するための便利な機能があります。
  • Nashorn は Java 8 に含まれており、Rhino は Java 8 から削除されます。

JavaFX で Nashorn を使用する例があり、開始するのに役立ちます。

Nashorn と JavaFX を含む Java 8 アーリー アクセス リリースは、 https ://jdk8.java.net/download.html からダウンロードできます 。


JavaFX ランタイムの問題に関しては、JavaFX ランタイムがランタイム クラスパスにない Java7 を使用している可能性があります。JRE の場所で jfxrt.jar を検索し、返された場所をランタイム クラスパスに追加します。これは、ランタイム クラスパスに JavaFX を含む Java 8 の問題ではありません。

于 2013-05-26T16:57:05.640 に答える