【发布时间】:2017-09-27 13:50:24
【问题描述】:
我想调用一个 Java 函数,该函数采用来自 Oracle 的 nashorn JavaScript 引擎的 char[] 输入参数(非数组参数类型的函数对我来说可以正常工作)。
如果我用 JavaScript 字符串字面量调用 Java 函数,nashorn 会拒绝
javax.script.ScriptException: TypeError: Can not invoke method
[jdk.internal.dynalink.beans.SimpleDynamicMethod
void org.xml.sax.DocumentHandler.characters(char [],int,int)]
with the passed arguments; they do not match any of its
method signatures.
如您所见,我正在尝试从 JavaScript/nashorn 调用用 Java 实现的 SAX 1 DocumentHandler,当然我也提供了 int 参数。
从http://winterbe.com/posts/2014/04/05/java8-nashorn-tutorial/ 和http://docs.oracle.com/javase/8/docs/technotes/guides/scripting/nashorn/api.html 我知道要将 JavaScript 字符串转换为 Java char[] 数组,我必须使用如下代码:
// laboriously converting a string into a Java char array
var text = "bla"
var charArrayType = Java.type("char[]")
var charArray = new charArrayType(text.length)
for (var i = 0; i < text.length; i++)
charArray[i] = text.charAt(i)
但如果我现在使用charArray 作为参数调用Java 函数,我仍然会收到上述错误消息。
【问题讨论】:
-
char[] 附带的两个 int 输入呢?您显然试图通过仅发送 char[] 来调用 DocumentHandler.characters(char [],int,int)?
-
你的第二个 sn-p 对我有用,但你也可以只传递一个 javascript char 数组。
-
@Assafs 你是对的;查看我对已接受答案的评论