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
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();