博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JDK8在Java转让Javascript脚本引擎动态地定义和运行代码
阅读量:5758 次
发布时间:2019-06-18

本文共 1744 字,大约阅读时间需要 5 分钟。

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) throws Exception {    ScriptEngineManager sem = new ScriptEngineManager();    ScriptEngine engine = sem.getEngineByName("javascript");     //python or jython, 
   //向上下文中存入变量   engine.put("msg", "just a test");   //定义类user   String str = "msg += '!!!';var user = {name:'tom',age:23,hobbies:['football','basketball']}; ";   engine.eval(str);   //从上下文引擎中取值   String msg = (String) engine.get("msg");   String name = (String) engine.get("name");   String[] hb = engine.get("hb");   System.out.println(msg);   System.out.println(name + ":" + hb[0]);   //定义数学函数   engine.eval("function add (a, b) {c = a + b; return c; }");    //取得调用接口    Invocable jsInvoke = (Invocable) engine;  //定义加法函数  Object result1 = jsInvoke.invokeFunction("add", new Object[] { 10, 5 });  System.out.println(result1);  //调用加法函数,注意參数传递的方法  Adder adder = jsInvoke.getInterface(Adder.class);  int result2 = adder.add(10, 35);  System.out.println(result2);  //定义run()函数  engine.eval("function run() {print('www.java2s.com');}");  Invocable invokeEngine = (Invocable) engine;  Runnable runner = invokeEngine.getInterface(Runnable.class);  //定义线程执行之  Thread t = new Thread(runner);  t.start();  t.join();  //导入其它java包  String jsCode = "importPackage(java.util);  var list2 = Arrays.asList(['A', 'B', 'C']); ";  engine.eval(jsCode);  List
list2 = (List
) engine.get("list2"); for (String val : list2) { System.out.println(val);} }}
 

 脚本引擎为实现动态功能(如插件机制)提供了良好的扩展性.

有关引擎接口的文档:

版权声明:本文博客原创文章,博客,未经同意,不得转载。

你可能感兴趣的文章
代码修改mac地址(需要root)
查看>>
oracle错误
查看>>
转:开火,移动-大神Joel 也浮躁
查看>>
Java微笔记(8)
查看>>
快速查找素数 http://acm.nyist.net/JudgeOnline/problem.php?pid=187
查看>>
深度数据对接 链接服务器 数据传输
查看>>
【解决方法】Ubuntu文本编辑器gedit打开中文出现乱码的
查看>>
[摘录]第一章 华为高效执行密码
查看>>
查看数据库账号
查看>>
Thread常用方法
查看>>
python基础===修改属性的值
查看>>
selenium===requestium模块介绍
查看>>
grpc错误处理
查看>>
简单的编辑器
查看>>
仿京东商城商品图片 缩略图+放大镜效果
查看>>
游戏暂停同时角色动作暂停
查看>>
【MyEcplise】设置右键快捷菜单的方法
查看>>
实践作业4:Web测试实践(小组作业)每日任务记录2
查看>>
【总结】IE和Firefox的Javascript兼容性总结
查看>>
Android开发 MMS支持 创建和编辑MMS
查看>>