从 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.
我遇到了一个 "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.