调用从nashorn(JDK 8 JavaScript引擎)获取char[]输入参数的Java函数?
我想调用一个Java函数,从Oracle的nashorn JavaScript引擎中获取调用从nashorn(JDK 8 JavaScript引擎)获取char[]输入参数的Java函数?,java,nashorn,Java,Nashorn,我想调用一个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.Documen
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实现的SAX1 DocumentHandler,当然我也提供了int参数
从中,我得到了将JavaScript字符串转换为Javachar[]
数组的方法,我必须使用如下代码:
// 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)
//费力地将字符串转换为Java字符数组
var text=“bla”
var charArrayType=Java.type(“char[]”)
var charArray=新字符类型(text.length)
对于(变量i=0;i
但是,如果我现在使用
charArray
作为参数调用Java函数,我仍然会收到上面的错误消息。我相信您的方法调用还有一些其他问题,因为您的方法对我有效:
var docHandlerType = Java.type("org.xml.sax.HandlerBase");
var docHandler = new docHandlerType();
var charArrayType = Java.type("char[]");
var chars = new charArrayType(2);
chars[0] = "x".charAt(0);
chars[1] = "y".charAt(0);
docHandler.characters(chars, 0, 2);
print("Successfully called DocumentHandler.characters");
documentHandler.characters(char[],int,int)
的第二个和第三个参数可能有问题:它们是否被省略,或者它们的值不是整数
值得一提的是,只需对普通字符串文字使用tocharray()
,就可以避免繁琐的字符数组循环:
var docHandlerType = Java.type("org.xml.sax.HandlerBase");
var docHandler = new docHandlerType();
docHandler.characters("bla".toCharArray(), 0, 3);
print("Successfully called DocumentHandler.characters");
char[]附带的两个int输入呢?显然,您试图通过只发送char[]来调用DocumentHandler.characters(char[],int,int)?您的第二个代码段对我很有用,但您也可以只传递一个javascript字符数组。@Assafs您是对的;请参阅我对公认答案的评论,以了解后验性:它对我不起作用的原因是我调用了一个类似委托DocumentHandler的对象(在JavaScript中),该对象调用了实际的Java函数。但是,代理没有传递
int
参数。也可以使用“bla.”.toCharArray()
确实有效;但不起作用的只是传递一个字符串,