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.isNotEmptyatcom.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"});这样是运行成功的
2 回答

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

手掌心
TA贡献1942条经验 获得超3个赞
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。
添加回答
举报
0/150
提交
取消