首页 文章

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

提问于
浏览
1

我想从Oracle的nashorn JavaScript引擎中调用一个带有 char[] 输入参数的Java函数(非数组参数类型的函数对我来说没问题) .

如果我用JavaScript字符串文字调用Java函数,nashorn balks

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函数,我仍然会收到上述错误消息 .

1 回答

  • 2

    我相信你的方法调用存在一些其他问题,因为你的方法适合我:

    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) 的第二个和第三个参数可能有问题:它们是否被省略,或者它们的值不是整数?

    对于它的 Value ,您可以通过在普通字符串文字上使用 toCharArray() 来避免费力的字符数组循环:

    var docHandlerType = Java.type("org.xml.sax.HandlerBase");
    var docHandler = new docHandlerType();
    docHandler.characters("bla".toCharArray(), 0, 3);
    print("Successfully called DocumentHandler.characters");
    

相关问题