问题描述
我正在尝试创建一个应用程序(游戏),该应用程序将使用Java来操作物理,逻辑等,但是将使用现有的javascript库来执行脚本,图形和ui之类的事情,但是在加载chart.js(和其他库)通过nashorn nashorn.eval("load('chart.js')");
我Exception in thread "main" javax.script.ScriptException: ReferenceError: "window" is not defined in chart.js at line number 668
得到以下错误(或与其他库相似) Exception in thread "main" javax.script.ScriptException: ReferenceError: "window" is not defined in chart.js at line number 668
。
是否可以按原样使用这些库,或者是否有必要进行任何修改,以及如何在Java应用程序中显示脚本(或者甚至可以在使用或不使用nashorn的情况下)?
谢谢。
1楼
如前所述,您可以使用JavaFX WebView将“浏览器” HTML +脚本加载到Nashorn JavaFX GUI中。 您可以加载生成的HTML或从URL加载。
简单的例子:
您还可以从Nashorn引擎访问“浏览器” JS / DOM对象,并使用nashorn脚本进行操作(如果需要):
考虑到您将要使用Java库,您可能还需要考虑不带WebView的JavaFX GUI(或者根据需要甚至混合使用n匹配)。 这里没有几个简单的例子:
将第三方HTML +脚本加载到JavaFX GUI并从nashorn脚本进行扩展的复杂示例:
2楼
但是,您也许可以说服它在JavaFX 容器中运行。 我没有尝试在容器中使用高级JavaScript库,但是我的经验是:
- 容器工作得很好,
- 调试运行在其中的应用程序非常困难,因为这样做的机制很少,
- 回传给Java应用程序的机制非常好,
-
您可以为URL的特定于应用程序的协议提供自定义处理,但是我不清楚它们如何影响WebView的安全模型(除非您更新了http:或https:流处理程序,这似乎可以使用
URL.setURLStreamHandlerFactory
方法)。