簡體   English   中英

從nashorn(JDK 8 JavaScript引擎)調用帶有char []輸入參數的Java函數嗎?

[英]Invoking a Java function taking a char[] input parameter from nashorn (JDK 8 JavaScript engine)?

我想調用一個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函數,我仍然會收到上述錯誤消息。

我相信您的方法調用還有其他問題,因為您的方法對我有用:

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)的第二和第三個參數有問題:它們是否被省略,或者它們的值不是整數?

對於它的價值,您可以通過僅對常規字符串文字使用toCharArray()來避免費力的字符數組循環:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM