javascript - 通过 JavaScripting API 从 JavaScript 使用 JavaFX (Rhino)

标签 javascript jvm javafx-2 rhino jsr223

我正在尝试通过 JavaScript 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 运行这个脚本。 该脚本的灵感来自from the Oracle documentation .

但是脚本在第 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 对此进行了说明。

我做错了什么?

最佳答案

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

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

有一个使用 Nashorn with JavaFX 的示例这应该可以帮助您入门。

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


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

关于javascript - 通过 JavaScripting API 从 JavaScript 使用 JavaFX (Rhino),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16759011/

相关文章:

javascript - 在函数中调用 scrollspy refresh 时需要帮助

java - Java 如何高效地解释大于 1 字节、未对齐的字节码常量?

webview - JavaFX WebView 中的缓存

java - 混音 Swing/FX : can't dispose a dialog from fxml controller

java - 在 JavaFX 中测量文本长度

javascript - jQuery 选择器与每个选择器

javascript - 当父项中的选择发生更改时,如何重置依赖子项的值?

javascript - 如何停止setTimeout递归

java - 加载具有父子关系的类时出现 LinkageError

java - Java 类加载的解析阶段实际上从哪里开始?