2017-09-27 10 views
1

私は、Javaの関数を呼び出すには、char[]入力パラメータをOracleのnashorn JavaScriptエンジン(非配列パラメータ型の関数は私にとってはうまく動作します)から呼び出したいとします。nashorn(JDK 8 JavaScriptエンジン)からchar []入力パラメータを受け取るJava関数を呼び出す?

私はあなたが私にはJavaScript/nashornからJavaで実装されたSAX 1のDocumentHandlerを起動しようとして見ることができるように

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. 

をbalks nashornリテラルJavaScriptの文字列、とJavaの関数を呼び出す場合、およびコースの私はintパラメータも提供しています。

// 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関数を呼び出す場合は、パラメータとしてcharArrayを使用して:

http://winterbe.com/posts/2014/04/05/java8-nashorn-tutorial/http://docs.oracle.com/javase/8/docs/technotes/guides/scripting/nashorn/api.htmlから私はそれは私が次のようなコードを使用する必要がありますJavaのchar[]配列にJavaScriptの文字列を変換するために取得します、私はまだ上記のエラーメッセージが表示されます。

+1

何のchar []に付属している2つのint型の入力についてはどうですか?あなたは明らかにchar []だけを送信してDocumentHandler.characters(char []、int、int)を呼び出そうとしていますか? – Assafs

+0

あなたの2番目のスニペットは私には役立ちますが、javascriptのchar配列を渡すこともできます。 –

+1

@Assafsあなたは正しいです。受け入れられた答えへの私のコメントを参照してください – imhotap

答えて

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)に2番目と3番目のパラメータと間違って何かを持っていることがあります。彼らは、省略、またはされているされていますそれらの値は整数ではありませんか?何が価値がある、あなただけのリテラル、通常の文字列にtoCharArray()を使用することにより、面倒な文字配列のループを避けることができるために

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

posteriorityについて:それは私のために働かなかった理由は、実際のJava関数を呼び出すDelegate DocumentHandlerのようなオブジェクト(JavaScriptで)を呼び出したということでした。しかし、代理人は 'int'パラメータを渡しませんでした。 '' bla。 ''を使ってもtoCharArray() 'は実際に動作します;何がうまくいかないのは文字列を渡すことだけですが、 – imhotap

関連する問題