Java8 新JavaScript脚本引擎Nashorn小试
2015-06-09 12:18
567 查看
一个对Nashorn脚本引擎很详细地介绍: http://winterbe.com/posts/2014/04/05/java8-nashorn-tutorial/
下面是我测试的小例子,模拟在游戏中伤害计算脚本化:
ScriptTest.java:
Test1.java:
本文出自 “zl1030的记录” 博客,请务必保留此出处http://zl1030.blog.51cto.com/274507/1660007
下面是我测试的小例子,模拟在游戏中伤害计算脚本化:
ScriptTest.java:
package com.zl1030.ScriptTest; import java.io.FileReader; import javax.script.Invocable; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; public class ScriptTest { public static void main(String[] args) { try { ScriptEngineManager factory = new ScriptEngineManager(); ScriptEngine engine = factory.getEngineByName("nashorn"); String scriptPath = System.getProperty("user.dir") + "/Scripts/Test1.js"; engine.eval(new FileReader(scriptPath)); Invocable invocable = (Invocable) engine; Test1 test1 = invocable.getInterface(Test1.class); ScriptResult result = (ScriptResult) test1.calc(new A(), new A()); System.out.println(test1.getLength("abcdefg")); System.out.println(result.getDamage() + " " + result.getTarget().getA() + " " + result.isResult()); } catch (Exception e) { e.printStackTrace(); } } }
Test1.java:
package com.zl1030.ScriptTest; public interface Test1 { public int getLength(String msg); public ScriptResult calc(A a, A b); }ScriptResult.java:
package com.zl1030.ScriptTest; public class ScriptResult { private A target; private boolean result; private int damage; public A getTarget() { return target; } public void setTarget(A target) { this.target = target; } public boolean isResult() { return result; } public void setResult(boolean result) { this.result = result; } public int getDamage() { return damage; } public void setDamage(int damage) { this.damage = damage; } }A.java:
package com.zl1030.ScriptTest; public class A { private int a = 0; private int b = 0; public int getA() { return a; } public void setA(int a) { this.a = a; } public int getB() { return b; } public void setB(int b) { this.b = b; } }Test1.js:
var ScriptResultClass=Java.type('com.zl1030.ScriptTest.ScriptResult'); function getLength(msg) { return msg.length; } function calc(a, b) { a.setA(1); a.setB(2); var result = new ScriptResultClass(); result.setTarget(a); result.setDamage(10); result.setResult(true); return result; }
本文出自 “zl1030的记录” 博客,请务必保留此出处http://zl1030.blog.51cto.com/274507/1660007
相关文章推荐
- JavaScript中的getDay()方法使用详解
- JS保留小数点,四舍五入
- 高德地图JavaScript API 自定义顶层Canvas与地图交互
- 七牛js sdk调用file中的blob生成图片的md5值。
- 如何删除JSP编译后的空行
- JavaScript的Date()方法使用详解
- js去除所有空格
- Javascript监视变量变化的方法
- 简介JavaScript中的unshift()方法的使用
- JSTL学习笔记
- JavaScript中的splice()方法使用详解
- JavaScript实现Iterator模式实例分析
- XML&JSON
- 关于jsp中文提交到后台乱码问题解决办法
- JavaScript数组迭代器实例分析
- jsp之九大内置对象
- 在Javascript中处理数组之toSource()方法的使用
- JavaScript中的some()方法使用详解
- JS 传值到jsp 中文字符乱码
- 在Java中直接调用js代码(转载)