Итак, вот сделка: Я прочитал this article и начал пытался использовать Rhino. До сих пор я получил, как вызвать функцию, и как получить ее возврат. То, что я не могу сделать, это передать параметр функции. Вот мой код:Передача параметров функции javascript
ScriptEngineManager engineMgr = new ScriptEngineManager();
ScriptEngine engine = engineMgr.getEngineByName("ECMAScript");
String js = "";
js += "function add(a, b) {";
js += " var sum = parseFloat(a) + parseFloat(b);";
js += " println(sum);";
js += "}";
engine.put("a", 3);
engine.put("b", 5);
Object returnn = null;
try {
engine.eval(js);
Invocable invocableEngine = (Invocable) engine;
returnn = invocableEngine.invokeFunction("add");
} catch (ScriptException e) {
System.out.println("Script error.");
} catch (NoSuchMethodException e) {
System.out.println("Method error.");
}
System.out.println(returnn);
Я не получаю никакого исключения, но возврат возвращается как NaN. Я попробовал напечатать a и b (Параметры), и они всегда равны нулю. Если это не лучший способ вызвать функцию, просто укажите мне какой-нибудь полезный поток. (Который я не нашел на мой собственный)
TYVM заранее
Вы можете избавиться от '.put' вызовов. И вместо этого вызывается 'invokeFunction (« add », 3, 5)' – skarmats
Это сработало. Чем ты! Но если я могу спросить что-то еще, я не всегда буду знать, сколько параметров имеет метод. Любые предложения о том, как это решить? –
См. Ответ ниже (от @Dan Howard) – skarmats