扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
/* * Test.java * * Created on 2007-9-19, 15:28:49 * * To change this template, choose Tools | Templates * and open the template in the editor. */ package lbf.script; 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"); } } |
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!'); } |
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者