Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
调用从nashorn(JDK 8 JavaScript引擎)获取char[]输入参数的Java函数?_Java_Nashorn - Fatal编程技术网

调用从nashorn(JDK 8 JavaScript引擎)获取char[]输入参数的Java函数?

调用从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

我想调用一个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实现的SAX1 DocumentHandler,当然我也提供了int参数

从中,我得到了将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)
//费力地将字符串转换为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()
确实有效;但不起作用的只是传递一个字符串,