从 Java 脚本调用 Java 时发生不可恢复的 stackoverflow 错误

Unrecoverable stackoverflow error when making upcalls from JavaScript to Java

我遇到了一个 "unrecoverable stack overflow error" 我想不通的问题。从 docs : 你需要创建一个接口对象(任何 class)并通过调用 JSObject.setMember()[=24 让 JavaScript 知道它=].

这里是 Java 代码共享和使用接口对象:

// somewhere in the code
JSObject window = (JSObject) engine.executeScript("window");
window.setMember("foo", new Foo()); // <-- shares
window.call("testFoo");             // <-- uses

// somewhere else
class Foo {
    public void bar() {
        System.out.println("baz");
    }
}

这是使用该对象的 Java脚本代码 :

window.testFoo = function() {
    window.foo.bar();
}

如果我像上面显示的那样手动触发它,或者如果我通过一些Java脚本事件触发它,就会发生这种情况。

答案在评论中,我不敢相信我已经尝试了几个小时的一切,而且很快就解决了。

原来暴露的接口必须是public.