Java8 新JavaScript脚本引擎Nashorn小试

一个对Nashorn脚本引擎很详细地介绍: http://winterbe.com/posts/2014/04/05/java8-nashorn-tutorial/

下面是我测试的小例子,模拟在游戏中伤害计算脚本化:

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;
}
时间: 2024-10-09 03:03:34

Java8 新JavaScript脚本引擎Nashorn小试的相关文章

JDK8在Java转让Javascript脚本引擎动态地定义和运行代码

import java.lang.*; import java.util.Arrays; import java.util.List; import javax.script.Invocable; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; public class ScriptEngineTest { public static void main(String[] args) throw

JDK8中Java调用Javascript脚本引擎动态定义与执行代码

import java.lang.*; import java.util.Arrays; import java.util.List; import javax.script.Invocable; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; public class ScriptEngineTest { public static void main(String[] args) throw

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

译序 有些网友对为什么D2JSP能执行JavaScript脚本程序感到奇怪,因此我翻译了这篇文章,原文在这里.这篇教程手把手教你怎样利用SpiderMonkey创建一个能执行JavaScript脚本的C++程序,并让JavaScript脚本操纵你的C++程序的内部数据.操作.从这篇教程能够看到在SpiderMonkey引擎的帮助下,让C++程序支持JavaScript脚本是一件非常easy的事,更棒的是SpiderMonkey也能够在Macintosh和Unix平台使用.SpiderMonkey

Rhino脚本引擎技术介绍

引用:http://p.primeton.com/articles/54c1e255be20aa4735000001 http://blog.csdn.net/u013292493/article/details/51020057 java8已不支持Rhino Java8的Nahsorn脚本引擎教程:http://www.cnblogs.com/top8/p/6207945.html

Java 8 的 Nashorn 脚本引擎教程

本文为了解所有关于 Nashorn JavaScript 引擎易于理解的代码例子. Nashorn JavaScript 引擎是Java SE 8的一部分,它与其它像Google V8 (它是Google Chrome 和Node.js的引擎)的独立引擎相互竞争. Nashorn 扩展了Java在JVM上运行动态JavaScript脚本的能力. 在接下来的大约15分钟里,您将学习如何在 JVM 上动态运行 JavaScript. 通过一些简短的代码示例演示最近 Nashorn 的语言特性. 学习

Java8新特性分享

原文地址:http://www.importnew.com/19345.html |放在下面防止网站挂了..做个备份 1.简介 毫无疑问,Java 8是自Java  5(2004年)发布以来Java语言最大的一次版本升级,Java 8带来了很多的新特性,比如编译器.类库.开发工具和JVM(Java虚拟机).在这篇教程中我们将会学习这些新特性,并通过真实例子演示说明它们适用的场景. 本教程由下面几部分组成,它们分别涉及到Java平台某一特定方面的内容: 语言 编译器 类库 开发工具 运行时(Jav

探真无阻塞加载javascript脚本技术,我们会发现很多意想不到的秘密

原文:探真无阻塞加载javascript脚本技术,我们会发现很多意想不到的秘密 下面的图片是我使用firefox和chrome浏览百度首页时候记录的http请求 下面是firefox: 下面是chrome: 在浏览百度首页前我都将浏览器的缓存全部清理掉,让这个场景最接近第一次访问百度首页的情景. 在firefox的请求瀑布图里有个表现非常之明显:就是javascript文件下载完毕后,有一段时间是没有网络请求被处理的,这段时间过后http请求才会接着执行,这段空闲时间就是所谓的http请求被阻塞

JavaScript模板引擎

JavaScript模板引擎实例应用 在之前的一篇名为<移动端基于HTML模板和JSON数据的JavaScript交互>的文章中,我向大家说明了为什么要使用JavaScript模板以及如何使用,文末还提到了laytpl.artTemplate.doT.baiduTemplate.kissyTemplate等模板引擎. 本文将举实例向大家讲解几个常用模板引擎的简单使用. 演示地址:模板引擎示例http://demo.52fhy.com/jstemp/ 准备工作 演示数据:blog.json结构:

推荐13款javascript模板引擎

javaScript 在生成各种页面内容时如果能结合一些模板技术,可以让逻辑和数据之间更加清晰,本文介绍 X 款 JavaScript 的模板引擎.(排名不分先后顺序) 1. Mustache 基于javascript 实现的模板引擎,类似于 Microsoft’s jQuery template plugin,但更简单易用! 2. EasyTemplate 在使用过Freemarker模 板后,感觉它的 语法比较朴实,平易近人,容易上手,于是决定按它的语法风格实现一个前端的 模板引擎,这就有了