通过JavaScript API (Rhino)从JavaScript使用JavaFX

Using JavaFX from JavaScript through the JavaScripting API (Rhino)

本文关键字:JavaScript 使用 JavaFX Rhino API 通过      更新时间:2023-09-26

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

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

我想用动态脚本编排JavaFX富客户端应用程序的某些部分。我正在评估捆绑JavaScript运行时(Rhino)的JavaScript 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.

我做错了什么?

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

  • Nashorn是一个比Rhino更现代的JavaScript引擎。
  • Nashorn有方便的特性来启动JavaFX JavaScript脚本。
  • java8中包含了Nashorn, Rhino将从java8中移除。

有一个在JavaFX中使用Nashorn的例子,应该可以帮助你入门。

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


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