Java引擎

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.List;

import javax.print.DocFlavor.URL;
import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;


@SuppressWarnings("all")  //压制所有的警告
public class Engine_GetRhino {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//获得脚本引擎
		ScriptEngineManager sem = new ScriptEngineManager();
		ScriptEngine engine=sem.getEngineByName("javascript");
		
		//定义变量,存储到引擎的上下文
		engine.put("msg", "you are very good");
		
		String str = "var user = {name:'waibizi',age:18,schools:['肇庆学院','计算机学院']};";
		str += "print(user.name);";
		
		
		
		//执行脚本
		try {
			engine.eval(str);
			engine.eval("msg='you are very bad';");
		} catch (ScriptException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		//测试输出
		System.out.println(engine.get("msg"));
		
		
		
		try {
			//定义函数
			engine.eval("function add(a,b){var sum = a + b; return sum;}");
			engine.eval("function add1(){var sum = 123 + 321; return sum;}");
			//执行函数
			Invocable jsInvoke = (Invocable) engine;
			Object result=jsInvoke.invokeFunction("add", new Object[] {15,13});  //指定函数赋值
			Object result1=jsInvoke.invokeFunction("add1");  //指定函数赋值
			System.out.println(result);
			System.out.println(result1);
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
		
		try {
			//js导入java的包,使用java的类
			
//			以下注释掉的代码是JDK1.6的,先已经抛弃了,看下面没注释的
//			String jsCode = "importPackage(java.util); var list=Arrays.asList([\"肇庆学院\",\"计算机学院\",\"软件工程\"]);"; 
			
			String jsCode = "var list=java.util.Arrays.asList([\"肇庆学院\",\"计算机学院\",\"软件工程\"]);";
			engine.eval(jsCode);
			List list = (List) engine.get("list");
			for(int i=0;i<list.size();i++) {
				System.out.println(list.get(i));
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
		try {
			java.net.URL url = Engine_GetRhino.class.getClassLoader().getResource("demo.js");
			FileReader fr = new FileReader(url.getPath());
			engine.eval(fr);
			fr.close();   //由于只是测试,就不那么规范了。大家实际用时要使用try catch finally!
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

}

 a.js如下

function test(){
	var a=666;
	print("invoke js file:"+a);
}

test();

  

猜你喜欢

转载自www.cnblogs.com/waibizi/p/12071108.html