2

我正在尝试通过 JavaScripting API (Rhino) 从 JavaScript 使用 JavaFX 2。

注意:这是一个富客户端问题,与网络编程无关。

我想用动态脚本编排我的 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 运行时。尽管 oracle 文档使用 java.awt 对此进行了说明。

我究竟做错了什么?

4

1 回答 1

2

我建议使用Nashorn 脚本引擎jjs -fx运行 JavaScript 编码的 JavaFX 脚本的命令。

  • Nashorn 是一个比 Rhino 更现代的 JavaScript 引擎。
  • Nashorn 具有启动 JavaFX JavaScript 脚本的便利功能。
  • Nashorn 包含在 Java 8 中,Rhino 将从 Java 8 中删除。

有一个将Nashorn 与 JavaFX结合使用的示例,它应该可以帮助您入门。

包括 Nashorn 和 JavaFX 在内的 Java 8 早期访问版本可从以下网址下载: https ://jdk8.java.net/download.html


关于您的 JavaFX 运行时问题,可能是因为您使用的是 Java7,而 JavaFX 运行时不在您的运行时类路径中。在您的 JRE 位置中搜索 jfxrt.jar 并将返回的位置添加到您的运行时类路径中。这不是 Java 8 的问题,它在运行时类路径中包含 JavaFX。

于 2013-05-26T16:57:05.640 回答