当前位置: 代码迷 >> JavaScript >> 使用Nashorn / JavaScript创建Java GUI应用程序
  详细解决方案

使用Nashorn / JavaScript创建Java GUI应用程序

热度:78   发布时间:2023-06-13 12:47:46.0

我正在尝试创建一个应用程序(游戏),该应用程序将使用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的情况下)?

谢谢。

如前所述,您可以使用JavaFX WebView将“浏览器” HTML +脚本加载到Nashorn JavaFX GUI中。 您可以加载生成的HTML或从URL加载。

简单的例子:

您还可以从Nashorn引擎访问“浏览器” JS / DOM对象,并使用nashorn脚本进行操作(如果需要):

考虑到您将要使用Java库,您可能还需要考虑不带WebView的JavaFX GUI(或者根据需要甚至混合使用n匹配)。 这里没有几个简单的例子:

将第三方HTML +脚本加载到JavaFX GUI并从nashorn脚本进行扩展的复杂示例:

但是,您也许可以说服它在JavaFX 容器中运行。 我没有尝试在容器中使用高级JavaScript库,但是我的经验是:

  • 容器工作得很好,
  • 调试运行在其中的应用程序非常困难,因为这样做的机制很少,
  • 回传给Java应用程序的机制非常好,
  • 您可以为URL的特定于应用程序的协议提供自定义处理,但是我不清楚它们如何影响WebView的安全模型(除非您更新了http:或https:流处理程序,这似乎可以使用URL.setURLStreamHandlerFactory方法)。
  相关解决方案