java里如何调用js里的方法
// js 代码
STRING_UTIL = {};
STRING_UTIL.isNotEmpty = function (str){
return "" != str;
}
// java 代码
Reader scriptReaderB = new InputStreamReader(
new FileInputStream(
new File("F:\\tech-study\\js-comm\\release\\bundle.js")),"utf-8");
engine.eval(scriptReaderB);
// engine.eval(scriptReaderA);
if (engine instanceof Invocable)
{
// 调用JS方法
Invocable invocable = (Invocable)engine;
Object result = invocable.invokeFunction("STRING_UTIL.isNotEmpty", new Object[]{"hahaha"});
System.out.println(result.toString());
}
// 调用异常
java.lang.NoSuchMethodException: no such method: STRING_UTIL.isNotEmpty
at com.sun.script.javascript.RhinoScriptEngine.invoke(RhinoScriptEngine.java:286)
at com.sun.script.javascript.RhinoScriptEngine.invokeFunction(RhinoScriptEngine.java:258)
at AAAAAAA.main(AAAAAAA.java:29)
// 如果在添加一个全局函数
function isNotEmpty (str){
return STRING_UTIL.isNotEmpty(str);
}
将调用方法变成
Object result = invocable.invokeFunction("isNotEmpty", new Object[]{"hahaha"});
这样是运行成功的
invokeFunction 方法说明 第一个参数是方法名,之后的都是方法的参数,返回值是 object 。