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

Using Nashorn/JavaScript to Create a Java GUI application

我正在尝试创建一个应用程序(游戏),它将使用 java 来操作物理、逻辑等,但会使用现有的 java 脚本库来执行脚本、图形等操作和 ui,但是当通过 nashorn nashorn.eval("load('chart.js')"); 加载 chart.js(和其他库)时,我得到以下内容(或其他库的类似内容) Exception in thread "main" javax.script.ScriptException: ReferenceError: "window" is not defined in chart.js at line number 668

是否可以按原样使用这些库,或者是否需要进行任何必要的修改,以及我如何在 java 应用程序中显示脚本(或者甚至可能,有或没有 nashorn)?

谢谢。

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

  • 容器运行良好,
  • 很难在其中调试应用程序 运行,因为很少有机制可以这样做,
  • 与 Java 应用程序通信的机制相当不错,
  • 您可以为 URL 的特定于应用程序的协议提供自定义处理,但我不清楚这些将如何影响 WebView 的安全模型(除非您更新了 http: 或 https: 流处理程序,这似乎是可以使用 URL.setURLStreamHandlerFactory 方法)。

如前所述,您可以使用 JavaFX WebView 将 "browser" HTML+脚本加载到 Nashorn JavaFX GUI 中。您可以加载生成的 HTML 以及来自 URL.

简单示例:

http://hg.openjdk.java.net/jdk9/dev/nashorn/file/f884dff432a7/samples/showsysprops.js http://hg.openjdk.java.net/jdk9/dev/nashorn/file/f884dff432a7/samples/showenv.js

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

http://hg.openjdk.java.net/jdk9/dev/nashorn/file/f884dff432a7/samples/browser_dom.js

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

http://hg.openjdk.java.net/jdk9/dev/nashorn/file/f884dff432a7/samples/jsonviewer.js http://hg.openjdk.java.net/jdk9/dev/nashorn/file/f884dff432a7/samples/time_color.fx http://hg.openjdk.java.net/jdk9/dev/nashorn/file/f884dff432a7/samples/fxml_example.js

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

https://gist.github.com/sundararajana/7b19ec08a8878426af5e