为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

MMMHUHU 2019-05-25 17:57:53
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:核心技术与最佳实践》这里面的第二章讲得很详细。有想去的可以取看看
                            
查看完整回答
反对 回复 2019-05-25
?
手掌心

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。
                            
查看完整回答
反对 回复 2019-05-25
  • 2 回答
  • 0 关注
  • 1044 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号