6.游戏特别离不开脚本(3)-JS脚本操作java(直接解析JS公式,并非完整JS文件或者函数)
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
6.游戏特别离不开脚本(3)-JS脚本操作java(直接解析JS公式,并非完整JS文件或者函数)的更多相关文章
- 6.游戏特别离不开脚本(3)-JS脚本操作java(3)(直接操作JS文件或者调用函数)
java直接运行JS脚本文件的语句,游戏开发时,策划的配置文件什么的就可以分开管理了,游戏逻辑也是一样,比如:一个功能一个脚本或者一个系统一个脚本. import java.io.FileNotFou ...
- 6.游戏特别离不开脚本(3)-JS脚本操作java(2)(直接解析JS公式,并非完整JS文件或者函数)
在游戏中可以考虑数据由javabean保存,逻辑方法由JS提供. public class Bean4JS { private int id; private String name; private ...
- 6.游戏特别离不开脚本(4)-应该避免将集合框架对象传给JS
java map 传给 javascript 不是自动关联的,最好别传啊,遍历起来也麻烦(尽量避开集合框架吧),用数组或者自建一个对象.这里虽然有种方法: // build a Map Map< ...
- 脚本AI与脚本引擎
Scripted AI and Scripting Engines 脚本AI与脚本引擎 This chapter discusses some of the techniques you can us ...
- 建站有很多技术,如 HTML、HTML5、XHTML、CSS、SQL、JavaScript、PHP、http://ASP.NET、Web Services、浏览器脚本、服务器脚本等。它们的区别是什么?新手一点不懂,想理清所有这些技术之间的关系和应用范围。
先普及用户通过 浏览器 访问网页 的过程: 网页内容是通过服务器运算得出的结果,将结果(网页代码)传输给浏览器,网页代码再通过浏览器运算(计算.渲染),最终展示在用户的眼前的. 至此,我们知道了有2个 ...
- 省市区联动JS脚本
省市区联动JS脚本 /* ***说明:省市区联动JS脚本 ***作者:Jerry Yuan */ var province=[{id:0,name:'选择省'},{id:11,name:" ...
- js脚本语言在页面上不执行
转换原理:// 编码原理就是创建TextNode节点,附加到容器中,再取容器的innerHTML.(将脚本编码) // 解码原理是将字符串赋給容器的innerHTML,再取innerText或text ...
- Firebug中调试中的js脚本中中文内容显示为乱码
Firebug中调试中的js脚本中中文内容显示为乱码 设置 页面 UFT-8 编码没用, 解决方法:点击 "Firebug"工具栏 中的"选项"---" ...
- 通过easyui tab添加的子页面JS脚本必须放在body才生效
通过easyui tab添加的子页面JS脚本必须放在body才生效 可通过Chrome查看元素时,head标签是否含有你自己写的JS代码
随机推荐
- 条款6:若不想使用编译器自动生成的函数,就该明确拒绝(Explicity disallow the use of compiler-generated functions you do not want)
class uncopyable{ protected: uncopyable(){}; ...
- LeetCode(10) Regular Expression Matching
题目 Implement regular expression matching with support for '.' and '*'. '.' Matches any single charac ...
- Java学习之跳转语句
Java语言中提供3中跳转语句,分别是break语句.continue语句和return语句. break语句 可以用在switch语句中.在switch语句中,break语句用于中止下面的case语 ...
- sql语句中嵌套2层循环
declare @year intdeclare @month intset @year=2008 while(@year<=2011)beginset @month=1while(@month ...
- Linux如何查看CPU负载
负载(load)是Linux机器的一个重要指标,直观了反应了机器当前的状态.如果机器负载过高,那么对机器的操作将难以进行. linux的负载高,主要是由于CPU使用.内存使用.IO消耗三部分构成.任意 ...
- UVALive 7148 LRIP
LRIPTime Limit: 10000MS Memory Limit: Unknown 64bit IO Format: %lld & %llu 解题:树分治 参考了Oyking大神的解法 ...
- Leetcode 284.顶端迭代器
顶端迭代器 给定一个迭代器类的接口,接口包含两个方法: next() 和 hasNext().设计并实现一个支持 peek() 操作的顶端迭代器 -- 其本质就是把原本应由 next() 方法返回的元 ...
- Robberies(01背包)
The aspiring Roy the Robber has seen a lot of American movies, and knows that the bad guys usually g ...
- 67. @Transactional的类注入失败【从零开始学Spring Boot】
[从零开始学习Spirng Boot-常见异常汇总] Spring的代理模式有两种:java自带的动态代理模式和cglib代理模式,cglib代码模式适用于没有接口的类,而java自带适用于接口类,默 ...
- NYOJ-183赚钱啦,bellman//spfa水过,,题还是蛮变态的赶脚~~
赚钱啦 时间限制:1000 ms | 内存限制:65535 KB 难度:5 描述 某国家里有N个城市,分别编号为0~N-1,一个精明的商人准备从0号城市旅行到N-1号城市,在旅行的过程中,从一个城 ...