Java8 新JavaScript脚本引擎Nashorn小试
一个对Nashorn脚本引擎很详细地介绍: http://winterbe.com/posts/2014/04/05/java8-nashorn-tutorial/
下面是我测试的小例子,模拟在游戏中伤害计算脚本化:
ScriptTest.java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
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:
1
2
3
4
5
6
7
8
|
package com.zl1030.ScriptTest;
public interface Test1 {
public int getLength(String msg);
public ScriptResult calc(A a, A b);
}
|
ScriptResult.java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
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:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
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:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
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 51CTO博客,原文链接:http://blog.51cto.com/zl1030/1660007
Java8 新JavaScript脚本引擎Nashorn小试相关推荐
- JavaScript脚本引擎SpiderMonkey
SpiderMonkey是Mozilla项目的一部分,是一个用C语言实现的JavaScript脚本引擎,另外还有一个叫做Rhino的Java版本. SpiderMonkey is Mozilla's ...
- Java8新特性总结 -8.Nashorn , JavaScript引擎
所有示例代码打包下载 : 点击打开链接 Java8新特性 : 接口新增默认方法和静态方法 Optional类 Lambda表达式 方法引用 Stream API - 函数式操作流元素集合 Date/T ...
- SpiderMonkey-让你的C++程序支持JavaScript脚本
译序 有些网友对为什么D2JSP能运行JavaScript脚本程序感到奇怪,因此我翻译了这篇文章,原文在这里.这篇教程手把手教你如何利用SpiderMonkey创建一个能执行JavaScript脚本的 ...
- java 脚本引擎性能_Java SE 6 入门之脚本引擎加大程序性能
Java SE 6 入门之脚本引擎加大程序性能 Java SE 6较Java SE5有了很大的改进,它的性能更强,而且是专为Vista所设计,这就象征着Java SE 6将是Vista上的最佳抉择.而 ...
- JavaSE 6之脚本引擎让程序如虎添翼
http://tech.it168.com/jd/2008-07-04/200807041154728.shtml [IT168 技术文档]Java SE 6最引人注目的新功能之一就是内嵌了脚本支持. ...
- java script eval_java ScriptEngine 使用 (支持JavaScript脚本,eval()函数等)
Java SE 6最引人注目的新功能之一就是内嵌了脚本支持.在默认情况下,Java SE 6只支持JavaScript,但这并不以为着Java SE 6只能支持JavaScript.在Java SE ...
- Java 脚本引擎的使用
文章目录 1. 前言 2. 脚本引擎的使用 2.1 脚本参数传递 2.2 脚本编译 2.3 脚本动态调用 1. 前言 Java 6 版本就已经引入了 Rhino 引擎用以支持脚本代码运行,而从 Jav ...
- Rhino脚本引擎技术介绍
引用:http://p.primeton.com/articles/54c1e255be20aa4735000001 http://blog.csdn.net/u013292493/article/d ...
- Java 8 的 Nashorn 脚本引擎教程
本文为了解所有关于 Nashorn JavaScript 引擎易于理解的代码例子. Nashorn JavaScript 引擎是Java SE 8的一部分,它与其它像Google V8 (它是Goog ...
最新文章
- 如何使用Junit进行单元测试
- vue写进html,vue中html页面写入$t(‘’)怎么显示
- 排序算法——直接插入排序
- 前端学习(1994)vue之电商管理系统电商系统之通过编程导航跳转到商品导航界面
- 日积月累系列之分页控件(js源码)
- Poisson泊松分布
- 【数字全排列】LeetCode 47. Permutations II
- 成为高级程序员的 10 个步骤
- WPF Prism框架介绍
- ds18b20数字温度传感器特点及使用介绍
- 加性噪声(目前不理解)
- sprintf,snprintf的用法(可以作为linux中itoa函数的补充)
- [渝粤教育] 西南科技大学 资源与环境概论 在线考试复习资料
- 网络打印机安装教程:HP LaserJet Pro MFP M226dw,Windows解决外网无法使用打印机问题
- Java8的stream处理List集合的相同部分(交集)、去重
- 联想微型计算机怎么进入bios,联想怎么进入bios图文教程
- 使用draw.io桌面版代替visio制作流程图
- OpenCV4-C++读图、显示图
- 2021CFA一级二级三级预测 结合十余年实践总结
- ZYNQ7035使用FDMA读写PL DDR