java和js互相调用实现类似NPC等热部署event的方法
这里举个简单的计次的例子
新建一个client对象
用java调用指定js 在js里调用client的add方法
Client.java
public class Client { private int count = 0; public int getCount(){ return count; } public void setCount(int count){ this.count = count; } public int add(){ count++; return count; } }
Main.java
public static void main(String[] args) throws Exception { Client client = new Client(); ScriptEngineManager scriptEngineManager = new ScriptEngineManager(); //第一种写法 不需要传参的js 通过engine提前置入java对象 String code = "function add(){ client.add();}"; //定义js代码 可以配置成读入脚本 //第二种写法 传入对象 //String code = "function add(client){ client.add();}"; //定义js代码 可以配置成读入脚本 //开始拿到invoke ScriptEngine scriptEngine = scriptEngineManager.getEngineByName("javascript"); //拿到执行engine scriptEngine.eval(code); // 置入代码 //第一种写法 提前往js里置入java对象 scriptEngine.put("client",client); Invocable invocable = (Invocable)scriptEngine; // 拿到执行对象 System.out.println("Before Invoke->" + client.getCount()); //第一种执行 invocable.invokeFunction("add"); //第二种执行 //invocable.invokeFunction("add",client); System.out.println("Add Invoke->" + client.getCount()); }
大致思路就如上了
在这里可以新建一个抽象类 提供一个getInvoke方法比较实用
// /** // * 读取指定路径执行JS // * @param client // * @param scriptEngineManager // * @param path // * @return // */ // public Invocable getInvocable(Client client,ScriptEngineManager scriptEngineManager,String path){ // //开始拿到invoke // ScriptEngine scriptEngine; // try { // path = "scripts/" + path; // scriptEngine = null; // // if (scriptEngine == null) { // File scriptFile = new File(path); // if (!scriptFile.exists()) { // return null; // } // scriptEngine = scriptEngineManager.getEngineByName("javascript"); // // FileReader fr = new FileReader(scriptFile); // scriptEngine.eval(fr); // fr.close(); // } // return (Invocable) scriptEngine; // } catch (Exception e) { // //log.error("Error executing script. Script file: " + path + ".", e); // return null; // } //}
源码地址:https://git.oschina.net/lovewestwind/JsJava
本文作者:StanWind
文章标题: java和js互相调用实现类似NPC等热部署event的方法
本文地址:https://www.stanwind.com/post/48
版权声明:若无注明,本文皆为“Make it Better”原创,转载请保留文章出处。
本文地址:https://www.stanwind.com/post/48
版权声明:若无注明,本文皆为“Make it Better”原创,转载请保留文章出处。
相关文章