一个对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小试相关推荐

  1. JavaScript脚本引擎SpiderMonkey

    SpiderMonkey是Mozilla项目的一部分,是一个用C语言实现的JavaScript脚本引擎,另外还有一个叫做Rhino的Java版本. SpiderMonkey is Mozilla's ...

  2. Java8新特性总结 -8.Nashorn , JavaScript引擎

    所有示例代码打包下载 : 点击打开链接 Java8新特性 : 接口新增默认方法和静态方法 Optional类 Lambda表达式 方法引用 Stream API - 函数式操作流元素集合 Date/T ...

  3. SpiderMonkey-让你的C++程序支持JavaScript脚本

    译序 有些网友对为什么D2JSP能运行JavaScript脚本程序感到奇怪,因此我翻译了这篇文章,原文在这里.这篇教程手把手教你如何利用SpiderMonkey创建一个能执行JavaScript脚本的 ...

  4. java 脚本引擎性能_Java SE 6 入门之脚本引擎加大程序性能

    Java SE 6 入门之脚本引擎加大程序性能 Java SE 6较Java SE5有了很大的改进,它的性能更强,而且是专为Vista所设计,这就象征着Java SE 6将是Vista上的最佳抉择.而 ...

  5. JavaSE 6之脚本引擎让程序如虎添翼

    http://tech.it168.com/jd/2008-07-04/200807041154728.shtml [IT168 技术文档]Java SE 6最引人注目的新功能之一就是内嵌了脚本支持. ...

  6. java script eval_java ScriptEngine 使用 (支持JavaScript脚本,eval()函数等)

    Java SE 6最引人注目的新功能之一就是内嵌了脚本支持.在默认情况下,Java SE 6只支持JavaScript,但这并不以为着Java SE 6只能支持JavaScript.在Java SE ...

  7. Java 脚本引擎的使用

    文章目录 1. 前言 2. 脚本引擎的使用 2.1 脚本参数传递 2.2 脚本编译 2.3 脚本动态调用 1. 前言 Java 6 版本就已经引入了 Rhino 引擎用以支持脚本代码运行,而从 Jav ...

  8. Rhino脚本引擎技术介绍

    引用:http://p.primeton.com/articles/54c1e255be20aa4735000001 http://blog.csdn.net/u013292493/article/d ...

  9. Java 8 的 Nashorn 脚本引擎教程

    本文为了解所有关于 Nashorn JavaScript 引擎易于理解的代码例子. Nashorn JavaScript 引擎是Java SE 8的一部分,它与其它像Google V8 (它是Goog ...

最新文章

  1. 如何使用Junit进行单元测试
  2. vue写进html,vue中html页面写入$t(‘’)怎么显示
  3. 排序算法——直接插入排序
  4. 前端学习(1994)vue之电商管理系统电商系统之通过编程导航跳转到商品导航界面
  5. 日积月累系列之分页控件(js源码)
  6. Poisson泊松分布
  7. 【数字全排列】LeetCode 47. Permutations II
  8. 成为高级程序员的 10 个步骤
  9. WPF Prism框架介绍
  10. ds18b20数字温度传感器特点及使用介绍
  11. 加性噪声(目前不理解)
  12. sprintf,snprintf的用法(可以作为linux中itoa函数的补充)
  13. [渝粤教育] 西南科技大学 资源与环境概论 在线考试复习资料
  14. 网络打印机安装教程:HP LaserJet Pro MFP M226dw,Windows解决外网无法使用打印机问题
  15. Java8的stream处理List集合的相同部分(交集)、去重
  16. 联想微型计算机怎么进入bios,联想怎么进入bios图文教程
  17. 使用draw.io桌面版代替visio制作流程图
  18. OpenCV4-C++读图、显示图
  19. 2021CFA一级二级三级预测 结合十余年实践总结
  20. ZYNQ7035使用FDMA读写PL DDR

热门文章

  1. jenkins配置sonar并扫描C#代码
  2. 21天Jenkins打卡Day14-maven服务
  3. 干货| 一文读懂,软件测试必会的方法和技术知识点!
  4. 性能测试(一)性能测试是什么?有哪些分类?
  5. 百万年薪挖了个P7程序员,难道是“水货”?
  6. 计算机配置扫盲,扫盲了。。怎么识别电脑配置好坏?
  7. python 错误类型及解释
  8. java的程序编码_Java 程序编码规范(初学者要牢记)
  9. mysql清除旧版本_MYSQL使用INNODB时及时清理旧版本数据
  10. DX学习笔记之Surfaces