| 关键词: nbsp import list Invocable 对象 engin javax 引擎 函数 script |
function doSth(){ jf.setSize(500,300); jf.setVisible(true); jf.setDefaultCloseOperation(jf.EXIT_ON_CLOSE); } function getNames(){ list.add("doSth"); list.add("getNames"); return list; } function testJS(){ print('Hello world!'); } import java.io.FileReader; import java.util.ArrayList; import java.util.List; import javax.script.Bindings; import javax.script.Invocable; import javax.script.ScriptContext; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.swing.JFrame; /** * * @author hadeslee */ public class Test { public static void main(String[] args)throws Exception { //根据js的后缀名生成一个解析JS的脚本解析引擎 ScriptEngine engin=new ScriptEngineManager().getEngineByExtension("js"); //查询一下这个引擎是否实现了下面很实用的接口 System.out.println(engin instanceof Invocable); //声明两个对象,传入到JS里面去 JFrame jf=new JFrame("test"); List<String> list=new ArrayList<String>(); //得到挷定的键值对象,把当前的两个JAVA对象放进去 Bindings bind=engin.createBindings(); bind.put("jf",jf); bind.put("list",list); //把挷下的键值对象放进去,作用域是当前引擎的范围 engin.setBindings(bind,ScriptContext.ENGINE_SCOPE); //用引擎执行一段写在JS文件里面的代码 Object obj=engin.eval(new FileReader("test.js")); //这个时候返回值当然 是null了 System.out.println(obj); //把当前的引擎强制转为Invocable,这样就可以调用定义在JS文件里面的一个一个函数了 Invocable in=(Invocable)engin; //得到了从JS里面返回来的对象 List<String> l=(List<String>)in.invokeFunction("getNames"); System.out.println(l); //调用一下定义在JS里面的另一个函数 in.invokeFunction("testJS"); //最后调用一个函数,该函数可以使我们前面定义的窗体显示出来 in.invokeFunction("doSth"); } } |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|