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
相关文章
|
2月前
|
JavaScript 前端开发 测试技术
使用Selenium执行JavaScript脚本:探索Web自动化的新领域
本文介绍了如何在Selenium中使用JavaScript解决自动化测试中的复杂问题。Selenium的`execute_script`函数用于同步执行JS,例如滑动页面、操作时间控件等。在滑动操作示例中,通过JS将页面滚动到底部,点击下一页并获取页面信息。对于只读时间控件,利用JS去除readonly属性并设置新日期。使用JS扩展了Selenium的功能,提高了测试效率和精准度,适用于各种自动化测试场景。
49 1
|
2月前
|
JavaScript 前端开发 Java
liteflow规则引擎 执行Javascript脚本
liteflow规则引擎 执行Javascript脚本
46 1
|
9天前
|
Java 关系型数据库 MySQL
Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
【4月更文挑战第12天】Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
46 3
|
6天前
|
JavaScript 前端开发 Oracle
java和JavaScript的区别
java和JavaScript的区别
7 3
|
20天前
|
Web App开发 缓存 JavaScript
|
2月前
|
JSON JavaScript 前端开发
JS逆向快速定位关键点之9大通用hook脚本
JS逆向快速定位关键点之9大通用hook脚本
|
2月前
|
前端开发 Java 测试技术
《手把手教你》系列基础篇(五)-java+ selenium自动化测试- 创建首个自动化脚本(详细教程)
【2月更文挑战第14天】《手把手教你》系列基础篇(五)-java+ selenium自动化测试- 创建首个自动化脚本(详细教程) 前面几篇宏哥介绍了两种(java和maven)环境搭建和三大浏览器的启动方法,这篇文章宏哥将要介绍第一个自动化测试脚本。前边环境都搭建成功了,浏览器也驱动成功了,那么我们不着急学习其他内容,首先宏哥搭建好的环境中创建首个完整的自动化测试脚本,让小伙伴或者童鞋们提前感受感受,也是为了激起大家的学习兴趣。宏哥的个人经验是:自动化脚本编写比较容易,最大的困难去如何去写测试断言。自动化测试,最重要的还是落在测试上面,而不是自动化,自动化只是手段。
42 1
《手把手教你》系列基础篇(五)-java+ selenium自动化测试- 创建首个自动化脚本(详细教程)
|
2月前
|
Java 关系型数据库 MySQL
Java调用shell脚本实现数据库备份功能
本篇文章主要介绍怎样使用Java程序,执行服务器上的数据库备份Shell脚本进行MySQL数据库的备份功能。
|
2月前
|
开发框架 前端开发 JavaScript
Java和JavaScript区别与联系
Java和JavaScript区别与联系
34 0
|
2月前
|
前端开发 JavaScript Java
【Java】Java与JavaScript:探究它们的区别与联系
【Java】Java与JavaScript:探究它们的区别与联系
46 0