我正在尝试通过 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/