Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过JavaScriptingAPI(Rhino)从JavaScript使用JavaFX_Javascript_Jvm_Javafx 2_Rhino_Jsr223 - Fatal编程技术网

通过JavaScriptingAPI(Rhino)从JavaScript使用JavaFX

通过JavaScriptingAPI(Rhino)从JavaScript使用JavaFX,javascript,jvm,javafx-2,rhino,jsr223,Javascript,Jvm,Javafx 2,Rhino,Jsr223,我正在试验通过JavaScriptingAPI(Rhino)从JavaScript使用JavaFX2 注意:这是一个富客户端问题,与web编程无关 我想用动态脚本编排JavaFX富客户端应用程序的某些部分。我正在评估带有捆绑JavaScript运行时(Rhino)的JavaScriptingAPI是否适合我的需求 因此,我的第一次尝试是通过JavaScript创建一个简单的JavaFXGUI: print('Starting...') importPackage(Packages.javafx

我正在试验通过JavaScriptingAPI(Rhino)从JavaScript使用JavaFX2

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

我想用动态脚本编排JavaFX富客户端应用程序的某些部分。我正在评估带有捆绑JavaScript运行时(Rhino)的JavaScriptingAPI是否适合我的需求

因此,我的第一次尝试是通过JavaScript创建一个简单的JavaFXGUI:

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运行这个脚本。 这个剧本的灵感来了

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

我做错了什么?

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

  • Nashorn是比Rhino更现代的JavaScript引擎
  • Nashorn具有启动JavaFXJavaScript脚本的便利特性
  • Nashorn包含在Java8中,Rhino将从Java8中删除
这里有一个例子可以帮助您开始使用

Java 8早期访问版本(包括Nashorn和JavaFX)可从以下网站下载:



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

谢谢。不幸的是,Java8不是我的选择。将jfxrt.jar放在类路径上会有所帮助。我仍然无法使用jrunscript运行脚本,我得到了一个java.lang.IllegalStateException:不在FX应用程序线程上。但是当通过JavaScriptingAPI(即通过ScriptEngine)从JavaFX应用程序运行脚本时,它工作了!