WEB开发网
开发学院软件开发Java Java的脚本动态用法 阅读

Java的脚本动态用法

 2009-09-22 00:00:00 来源:WEB开发网   
核心提示:functiondoSth(){jf.setSize(500,300);jf.setVisible(true);jf.setDefaultCloseOperation(jf.EXIT_ON_CLOSE);}functiongetNames(){list.add("doSth");list.add(&

  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");
  }
  }

Tags:Java 脚本 动态

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接