java里如何调用js里的方法?

java里如何调用js里的方法
//js代码
STRING_UTIL={};
STRING_UTIL.isNotEmpty=function(str){
return""!=str;
}
//java代码
ReaderscriptReaderB=newInputStreamReader(
newFileInputStream(
newFile("F:\\tech-study\\js-comm\\release\\bundle.js")),"utf-8");
engine.eval(scriptReaderB);
//engine.eval(scriptReaderA);
if(engineinstanceofInvocable)
{
//调用JS方法
Invocableinvocable=(Invocable)engine;
Objectresult=invocable.invokeFunction("STRING_UTIL.isNotEmpty",newObject[]{"hahaha"});
System.out.println(result.toString());
}
//调用异常
java.lang.NoSuchMethodException:nosuchmethod:STRING_UTIL.isNotEmpty
atcom.sun.script.javascript.RhinoScriptEngine.invoke(RhinoScriptEngine.java:286)
atcom.sun.script.javascript.RhinoScriptEngine.invokeFunction(RhinoScriptEngine.java:258)
atAAAAAAA.main(AAAAAAA.java:29)
//如果在添加一个全局函数
functionisNotEmpty(str){
returnSTRING_UTIL.isNotEmpty(str);
}
将调用方法变成
Objectresult=invocable.invokeFunction("isNotEmpty",newObject[]{"hahaha"});
这样是运行成功的
MMMHUHU
浏览 1045回答 2
2回答

烙印99

经过自己的实现,可以使用两种方法来实现:使用engine.evalObjectresult=engine.eval("STRING_UTIL.isNotEmpty('"+str+"')");这种方式来调用。使用invokeMethod方法来实现首先get到对象Objectthiz=engine.get("STRING_UTIL");接下来根据对象调用方法Objectresult=invocable.invokeMethod(thiz,"isNotEmpty",newObject[]{"hahaha"});再介绍一个本书给大家:《深入理解Java7:核心技术与最佳实践》这里面的第二章讲得很详细。有想去的可以取看看

手掌心

ScriptEngineManagermanager=newScriptEngineManager();ScriptEnginejavaScript=manager.getEngineByName("JavaScript");InputStreamstream=JS.class.getResourceAsStream("/js/test.js");BufferedReaderreader=newBufferedReader(newInputStreamReader(stream));javaScript.eval(reader);invocable=(Invocable)javaScript;invocable.invokeFunction("method");invokeFunction方法说明第一个参数是方法名,之后的都是方法的参数,返回值是object。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript