import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.List; import javax.print.DocFlavor.URL;
import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException; @SuppressWarnings("all") //压制所有的警告
public class Engine_GetRhino { public static void main(String[] args) {
// TODO Auto-generated method stub
//获得脚本引擎
ScriptEngineManager sem = new ScriptEngineManager();
ScriptEngine engine=sem.getEngineByName("javascript"); //定义变量,存储到引擎的上下文
engine.put("msg", "you are very good"); String str = "var user = {name:'waibizi',age:18,schools:['肇庆学院','计算机学院']};";
str += "print(user.name);"; //执行脚本
try {
engine.eval(str);
engine.eval("msg='you are very bad';");
} catch (ScriptException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} //测试输出
System.out.println(engine.get("msg")); try {
//定义函数
engine.eval("function add(a,b){var sum = a + b; return sum;}");
engine.eval("function add1(){var sum = 123 + 321; return sum;}");
//执行函数
Invocable jsInvoke = (Invocable) engine;
Object result=jsInvoke.invokeFunction("add", new Object[] {15,13}); //指定函数赋值
Object result1=jsInvoke.invokeFunction("add1"); //指定函数赋值
System.out.println(result);
System.out.println(result1); } catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} try {
//js导入java的包,使用java的类 // 以下注释掉的代码是JDK1.6的,先已经抛弃了,看下面没注释的
// String jsCode = "importPackage(java.util); var list=Arrays.asList([\"肇庆学院\",\"计算机学院\",\"软件工程\"]);"; String jsCode = "var list=java.util.Arrays.asList([\"肇庆学院\",\"计算机学院\",\"软件工程\"]);";
engine.eval(jsCode);
List list = (List) engine.get("list");
for(int i=0;i<list.size();i++) {
System.out.println(list.get(i));
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} try {
java.net.URL url = Engine_GetRhino.class.getClassLoader().getResource("demo.js");
FileReader fr = new FileReader(url.getPath());
engine.eval(fr);
fr.close(); //由于只是测试,就不那么规范了。大家实际用时要使用try catch finally!
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } }

 a.js如下

function test(){
var a=666;
print("invoke js file:"+a);
} test();

  

Java引擎的更多相关文章

  1. [Drools]JAVA规则引擎 -- Drools- 转http://blog.csdn.net/quzishen/article/details/6163012

    [Drools]JAVA规则引擎 -- Drools 标签: java引擎exceptiongetterstringsetter 2011-01-25 14:33 113340人阅读 评论(35) 收 ...

  2. Apache OFBiz 学习笔记 之 服务引擎 一

    概述     服务定义为一段独立的逻辑顺序,当多个服务组合一起时可完成不同类型的业务需求     服务有很多类型,WorkFlow.Rules.Java.SOAP.BeanShell等.java类型的 ...

  3. java开发工具比较(16个工具修订版)

    1.JDK (Java Development Kit)Java开发工具集 SUN的Java不仅提了一个丰富的语言和运行环境,而且还提了一个免费的Java开发工具集(JDK).开发人员和最终用户可以利 ...

  4. 架构选型之Nodejs与Java

    前言: 身边越来越多的同事谈论Nodejs,谈其异步IO.事件回调.前后台统一一门语言,创业的朋友的第一个创业项目也选择了Nodejs,期望能够使用一种语言节省成本快速完成需求开发.与其他项目组的同事 ...

  5. Android游戏引擎总汇 原文出处:http://software.intel.com/en-us/blogs/2012/03/13/game-engines-for-android?page=1

    随着Android系统的使用越来越广泛,了解一下Android平台下的游戏引擎就非常有必要.而同时因为基于Intel x86的移动设备越来越多,我也非常关注支持x86的移动游戏引擎.然而就目前为止游戏 ...

  6. 《JAVA与模式》之备忘录模式

    一.备忘录(Memento)模式结构 备忘录对象是一个用来存储另外一个对象内部状态的快照(snapshot)的对象.备忘录模式的用意是在不破坏封装的条件下,将一个对象的状态捕捉住,并外部化,存储起来, ...

  7. 十四种Java开发工具点评

    在计算机开发语言的历史中,从来没有哪种语言象Java那样受到如此众多厂商的支持,有如此多的开发工具,Java菜鸟们如初入大观园的刘姥姥,看花了眼,不知该何种选择.的确,这些工具各有所长,都没有绝对完美 ...

  8. Java开发工具全面比较

    1.JDK (Java Development Kit)Java开发工具集 从初学者角度来看Java开发工具,采用JDK开发Java程序能够很快理解程序中各部分代码之间的关系,有利于理解Java面向对 ...

  9. JAVA程序员常用开发工具

    1.JDK (Java Development Kit)Java开发工具集 SUN的Java不仅提了一个丰富的语言和运行环境,而且还提了一个免费的Java开发工具集(JDK).开发人员和最终用户可以利 ...

随机推荐

  1. ubuntu set up 6 - NTFS Mount

    1. NTFS Mounted as read-only https://askubuntu.com/questions/1138076/ubuntu-18-04-cant-write-on-ntfs ...

  2. 使用Dockerfile构建镜像命令自己的理解

    1.FROM 基于那个基础命令开始构建镜像,我的理解就是选择一个操作系统 2.CMD 里面放的是指定一个容器启动时要运行的命令 3.ENTRYPOINT 类似于CDM命令,不过 docker run ...

  3. PAT (Basic Level) Practice (中文)1037 在霍格沃茨找零钱 (20 分)

    如果你是哈利·波特迷,你会知道魔法世界有它自己的货币系统 —— 就如海格告诉哈利的:“十七个银西可(Sickle)兑一个加隆(Galleon),二十九个纳特(Knut)兑一个西可,很容易.”现在,给定 ...

  4. PAT (Basic Level) Practice (中文)1064 朋友数 (20 分) (set)

    如果两个整数各位数字的和是一样的,则被称为是“朋友数”,而那个公共的和就是它们的“朋友证号”.例如 123 和 51 就是朋友数,因为 1+2+3 = 5+1 = 6,而 6 就是它们的朋友证号.给定 ...

  5. 0级搭建类010-Oracle Linux 6.x安装(OEL 6.10) 公开

    项目文档引子系列是根据项目原型,制作的测试实验文档,目的是为了提升项目过程中的实际动手能力,打造精品文档AskScuti. 项目文档引子系列目前不对外发布,仅作为博客记录.如学员在实际工作过程中需提前 ...

  6. laravel封装返回json信息工具类

    1.工具类可以一次写入多方多方调用,很大程度的节约开发时间得到想要的信息 这里演示一个json接口的工具类(文件定义在App\Http\Controllers\Tools)中 <?php /** ...

  7. linux下载phantomjs记录

    step1:建目录: cd /root mkdir PhantomJS step2:下载phantomjs安装包 可以直接进网址下载到本地后,再传到linux路径,例如phantomjs-1.9.7- ...

  8. 2019牛客多校第一场H XOR 线性基模板

    H XOR 题意 给出一组数,求所有满足异或和为0的子集的长度和 分析 n为1e5,所以枚举子集肯定是不可行的,这种时候我们通常要转化成求每一个数的贡献,对于一组数异或和为0.我们考虑使用线性基,对这 ...

  9. PP: GRU-ODE-Bayes: Continuous modeling of sporadically-observed time series

    From: KU Leuven; ESAT-STADIUS比利时鲁汶大学 ?? How to model real-world multidimensional time series? especi ...

  10. Yaf学习过程中遇到的问题小记

    一.在多模块开发过程中,先写了后台模块,即一开始默认的Index Module,之后新增Frontend,Wap模块,想要直接把Frontend模块设置成默认模块,然而setDefaultModule ...