使用Nashorn在Java中运行带有导出功能的Javascript代码

使用Nashorn在Java中运行带有导出功能的Javascript代码,javascript,java,nashorn,Javascript,Java,Nashorn,是否可以使用Nashorn在Java中运行包含导出函数的Javascript代码?我是Nashorn的新手,所以我不确定js代码是否有限制。另外,如何将参数从Java传递到js代码 Javascript代码如下所示(摘自): 但它给了我类似的错误 线程“main”java.lang.ClassCastException中的异常: 无法将jdk.nashorn.api.scripting.ScriptObjectMirror强制转换为点 如何从js代码中获得结果?Nashorn不完全支持ECMA6

是否可以使用Nashorn在Java中运行包含导出函数的Javascript代码?我是Nashorn的新手,所以我不确定js代码是否有限制。另外,如何将参数从Java传递到js代码

Javascript代码如下所示(摘自):

但它给了我类似的错误

线程“main”java.lang.ClassCastException中的异常: 无法将jdk.nashorn.api.scripting.ScriptObjectMirror强制转换为点

如何从js代码中获得结果?

Nashorn不完全支持ECMA6功能,export是其中之一,不受支持

参考资料:

它开始支持JDK8本身的一些,以及JDK9中的一些。但我找不到支持出口的证据

另外,如何将参数从Java传递到js代码? 如果您有以下功能

那你就可以,

ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
engine.eval(new FileReader("script.js"));

Invocable invocable = (Invocable) engine;

Object result = invocable.invokeFunction("fun1", "Peter Parker");
System.out.println(result);
System.out.println(result.getClass());

// Hi there from Javascript, Peter Parker
// greetings from javascript
// class java.lang.String

这是取自

是否可以使用Nashorn从Java调用Javascript函数?对但是
export
与此无关。您将需要
ScriptEngine
,然后您可以
eval
调用您的函数,或者获取
Invocable
调用您的函数。@ElliottFrisch所以它是导出函数还是普通函数都无所谓,只要我使用ScriptEngine调用函数本身?加载js函数的同一个ScriptEngine。不仅仅是任何scriptengine。如果我只是删除导出,使其成为一个普通函数,是否可以?我已经尝试了你的代码,但它仍然给我错误,请查看我的代码实现的更新问题
    ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
    //      engine.eval("print('Hello World!');");
    engine.eval(new FileReader("circleintersection.js"));

    Invocable invocable = (Invocable) engine;

    Point a = new Point(3,2);
    Point b = new Point(5,3);
    Point c = new Point(1,4);
    Point d = new Point(2,5);
    Point e = new Point(6,6);

    Point[] points = {a,b,c,d,e};

    Point result = (Point) invocable.invokeFunction("getCenter", points);
    System.out.println(result.x);
var fun1 = function(name) {
    print('Hi there from Javascript, ' + name);
    return "greetings from javascript";
};

var fun2 = function (object) {
    print("JS Class Definition: " + Object.prototype.toString.call(object));
};
ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
engine.eval(new FileReader("script.js"));

Invocable invocable = (Invocable) engine;

Object result = invocable.invokeFunction("fun1", "Peter Parker");
System.out.println(result);
System.out.println(result.getClass());

// Hi there from Javascript, Peter Parker
// greetings from javascript
// class java.lang.String