使用nashorn从java中的javascript代码返回输出值

pdtvr36n  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(436)

我这里有一个简短的代码

ScriptEngineManager mgr = new ScriptEngineManager();
        ScriptEngine engine = mgr.getEngineByName("JavaScript");

        String foo = "print(2);";

        Object s =engine.eval(foo);

        System.out.println(s); // printing null

我想要得到的结果是engine.eval(foo)打印出来保存在一个字符串变量中,例如s值应该是2,在这种情况下我如何实现engine.val(foo)没有返回任何东西。

sg24os4d

sg24os4d1#

问题的根本原因是javascript print() 函数没有返回值(在typescript中是 function print(): void ). 所以你的代码运行得很好(你可以看到 2 在标准输出中打印),但是 print(2); 哪个是 void 被解释为 null .
如果调用返回值的函数(或语句),它将正常工作:

ScriptEngineManager mgr = new ScriptEngineManager();
        ScriptEngine engine = mgr.getEngineByName("JavaScript");

        String foo = "x = 1+2;";

        Object s = engine.eval(foo);
        System.out.println(s); // printing 3

也可以使用变量来处理结果:

ScriptEngineManager mgr = new ScriptEngineManager();
        ScriptEngine engine = mgr.getEngineByName("JavaScript");

        String jsCode = "jsVar = 1+2;";

        engine.eval(jsCode);
        Object javaVar = engine.get("jsVar");

        System.out.println(javaVar); // printing 3

相关问题