代码之家  ›  专栏  ›  技术社区  ›  The Impaler

从Java 8 NASHORN引擎运行“图形化”VI.JS

  •  1
  • The Impaler  · 技术社区  · 6 年前

    我试图在服务器上从Java 8(Nashorn引擎)渲染GraveVz,但是我得到了错误:

    Exception in thread "main" javax.script.ScriptException: ReferenceError: "Promise" is not defined in <eval> at line number 120
        at jdk.nashorn.api.scripting.NashornScriptEngine.throwAsScriptException(NashornScriptEngine.java:455)
        at jdk.nashorn.api.scripting.NashornScriptEngine.invokeImpl(NashornScriptEngine.java:387)
        at jdk.nashorn.api.scripting.NashornScriptEngine.invokeMethod(NashornScriptEngine.java:196)
        at test1.VizDemo.main(VizDemo.java:24)
    Caused by: <eval>:120 ReferenceError: "Promise" is not defined
    

    这是迄今为止我的(简单)程序:

    import java.io.InputStreamReader;
    
    import javax.script.Invocable;
    import javax.script.ScriptEngine;
    import javax.script.ScriptEngineManager;
    
    public class VizDemo {
    
      public static void main(String args[]) throws Exception {
    
        ScriptEngineManager manager = new ScriptEngineManager();
        ScriptEngine engine = manager.getEngineByName("JavaScript");
    
        engine.eval(new InputStreamReader(VizDemo.class.getResourceAsStream(
          "./viz.js")));
        engine.eval(new InputStreamReader(VizDemo.class.getResourceAsStream(
          "./full.render.js")));
    
        Object v = engine.eval("new Viz();");
        System.out.println("v=" + v);
    
        if (engine instanceof Invocable) {
          Invocable invEngine = (Invocable) engine;
          Object result = invEngine.invokeMethod(v, "renderSVGElement",
              "digraph { a -> b; a -> c; }");
          System.out.println("result=" + result);
        }
      }
    
    }
    

    我错过了什么?或者…在Java 8中运行JavaScript实际上是可能的吗?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Rafael Guillen    6 年前

    纳索恩不支持 Promise ,您需要实现一个“pollyfill”来提供 承诺 支持。以下是一个实现: https://github.com/shendepu/nashorn-polyfill