您的位置:首页 > 编程语言 > Java开发

6.游戏特别离不开脚本(3)-JS脚本操作java(直接解析JS公式,并非完整JS文件或者函数)

2013-07-18 14:12 513 查看
engine.put("usList", us);

engine.put("obj", new JSModifiedJava()) ;

取个变量名就put进去

import java.util.ArrayList;
import java.util.List;

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

public class JSModifiedJava {

public void sayHello(String name){
System.out.println("*************Hello***************"+name);
}

public static void main(String[] args) {

//创建 List对象,并添加3个原用户
List<String> us = new ArrayList<String>();
us.add("JLee 1");
us.add("JLee 2");

//获得JS引擎
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByExtension("js");
String script = "";
//把List对象加入JS引擎
engine.put("usList", us);

{//用JS输出java对象的数据
System.out.println("用JS输出java对象的数据");
script = "var index; " + "var usname = usList.toArray(); "
+ "for (index in usname) { "
+ "println('原用户='+usname[index]); " + "}";

//执行脚本
try {
engine.eval(script);// 通过引擎调用getScript()
} catch (ScriptException e) {
e.printStackTrace();
}
}

{//JS可以对对象进行修改在,java代码可以得到修改后的
System.out.println("JS可以对对象进行修改在,java代码可以得到修改后的");
script = "usList.add(\"JLee 3\"); "
+ "usList.add(\"JLee 4\"); ";

//执行脚本
try {
engine.eval(script);// 通过引擎调用getScript()
} catch (ScriptException e) {
e.printStackTrace();
}

//java代码显示被JS修改后所有用户
for (String usname : us) {
System.out.println("所有用户 = " + usname);
}
}

//将要操作的对象加入引擎
engine.put("obj", new JSModifiedJava()) ;

{//在JS中甚至可以调用对象的方法
System.out.println("在JS中甚至可以调用对象的方法");
script = "obj.sayHello('JLee')" ;

//执行脚本
try {
engine.eval(script);// 通过引擎调用getScript()
} catch (ScriptException e) {
e.printStackTrace();
}

}

//        //根据JavaScript名获取一个脚本引擎实例
//        ScriptEngine engine2 = manager.getEngineByName("JavaScript");
//        try {
//            engine2.eval("print('Hello JLee ...')");
//        } catch (ScriptException e) {
//            e.printStackTrace();
//        }

}

}


执行结果

用JS输出java对象的数据
原用户=JLee 1
原用户=JLee 2
JS可以对对象进行修改在,java代码可以得到修改后的
所有用户 = JLee 1
所有用户 = JLee 2
所有用户 = JLee 3
所有用户 = JLee 4
在JS中甚至可以调用对象的方法
*************Hello***************JLee
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: