1. import java.io.File;
  2.  
  3. import javax.script.Invocable;
  4. import javax.script.ScriptEngine;
  5. import javax.script.ScriptEngineManager;
  6. import javax.script.ScriptException;
  7.  
  8. public class TestJs {
  9. public static void main(String[] args) throws Exception {
  10. ScriptEngineManager manager = new ScriptEngineManager();
  11. ScriptEngine engine = manager.getEngineByName("JavaScript");
  12. testScriptVariables(engine);// 演示如何暴露Java对象为脚本语言的全局变量
  13. testInvokeScriptMethod(engine);// 演示如何在Java中调用脚本语言的方法
  14. testScriptInterface(engine);// 演示脚本语言如何实现Java的接口
  15. testUsingJDKClasses(engine);// 演示脚本语言如何使用JDK平台下的类
  16. }
  17.  
  18. public static void testScriptVariables(ScriptEngine engine)
  19. throws ScriptException {
  20. File file = new File("test.txt");
  21. engine.put("f", file);
  22. engine.eval("println('Total Space:'+f.getTotalSpace())");
  23. }
  24.  
  25. public static void testInvokeScriptMethod(ScriptEngine engine)
  26. throws Exception {
  27. String script = "function hello(name) { return 'Hello,' + name;}";
  28. engine.eval(script);
  29. Invocable inv = (Invocable) engine;
  30. String res = (String) inv.invokeFunction("hello", "Scripting");
  31. System.out.println("res:" + res);
  32. }
  33.  
  34. public static void testScriptInterface(ScriptEngine engine)
  35. throws ScriptException {
  36. String script = "var obj = new Object(); obj.run = function() { println('run method called'); }";
  37. engine.eval(script);
  38. Object obj = engine.get("obj");
  39. Invocable inv = (Invocable) engine;
  40. Runnable r = inv.getInterface(obj, Runnable.class);
  41. Thread th = new Thread(r);
  42. th.start();
  43. }
  44.  
  45. public static void testUsingJDKClasses(ScriptEngine engine)
  46. throws Exception {
  47. // Packages是脚本语言里的一个全局变量,专用于访问JDK的package
  48. String js = "function doSwing(t){var f=new Packages.javax.swing.JFrame(t);f.setSize(400,300);f.setVisible(true);}";
  49. engine.eval(js);
  50. Invocable inv = (Invocable) engine;
  51. inv.invokeFunction("doSwing", "Scripting Swing");
  52. }
  53. }

JDK1.7中调用javascript方法的更多相关文章

  1. 在 Flash ActionScript 2.0 中调用 Javascript 方法

    本篇文章由:http://xinpure.com/call-the-javascript-method-in-flash-actionscript-2-0/ 在 Flash ActionScript ...

  2. iOS JS 交互之利用系统JSContext实现 JS调用OC方法以及Objective-C调用JavaScript方法

    ios js 交互分为两块: 1.oc调用js 这一块实现起来比较简单, 我的项目中加载的是本地的html,js,css,需要注意的是当你向工程中拖入这些文件时,选择拷贝到工程中,(拖入的文件夹是蓝色 ...

  3. 一步一步学Silverlight 2系列(21):如何在Silverlight中调用JavaScript

    概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...

  4. 【问题】Asp.net MVC 的cshtml页面中调用JS方法传递字符串变量参数

    [问题]Asp.net MVC 的cshtml页面中调用JS方法传递字符串变量参数. [解决]直接对变量加引号,如: <button onclick="deleteProduct('@ ...

  5. C# 构造函数中调用虚方法的问题

    请看下面代码: using System; public class A{ public A(){ M1(); } public virtual void M1(){} } public class ...

  6. 【09】绝不在构造和析构过程中调用virtual方法

    1.绝不在构造和析构过程中调用virtual方法,为啥? 原因很简单,对于前者,这种情况下,子类专有成分还没有构造,对于后者,子类专有成分已经销毁,因此调用的并不是子类重写的方法,这不是程序员所期望的 ...

  7. angularjs 动态表单, 原生事件中调用angular方法

    1. 原生事件中调用angular方法, 比如 input的onChange事件想调用angular里面定义的方法 - onChange="angular.element(this).sco ...

  8. 避免在构造函数中调用虚方法(Do not call overridable methods in constructors)

    CLR中说道,不要在构造函数中调用虚方法,原因是假如被实例化的类型重写了虚方法,就会执行派生类型对虚方法的实现.但在这个时候,尚未完成对继承层次结构中所有字段的初始化.所以,调用虚方法会导致不可预测的 ...

  9. Python 在子类中调用父类方法详解(单继承、多层继承、多重继承)

    Python 在子类中调用父类方法详解(单继承.多层继承.多重继承)   by:授客 QQ:1033553122   测试环境: win7 64位 Python版本:Python 3.3.5 代码实践 ...

随机推荐

  1. Hadoop学习笔记2---配置详解

    配置系统是复杂软件必不可少的一部分,而Hadoop配置信息处理是学习Hadoop源代码的一个很好的起点.现在就从Hadoop的配置文件谈起. 一.Hadoop配置格式 Hadoop配置文件格式如下所示 ...

  2. cmake编译win下64位obs

    obs是一款开源编码推流工具,简单易用,非常流行.一次项目中,发现本台式机I3处理器下32位obs推流CPU使用率100%.而使用的第三方设备在64位下,性能较好.所以需要编译64位obs并且编译相应 ...

  3. Java缓存学习之三:CDN缓存机制

    CDN是什么? 关于CDN是什么,此前网友详细介绍过. CDN是Content Delivery Network的简称,即"内容分发网络"的意思.一般我们所说的CDN加速,一般是指 ...

  4. Linux下的scp拷贝命令详解

    相同Linux系统中对文件复制拷贝可以用CP命令: cp [options] source dest cp [options] source... directory 说明:将一个档案拷贝至另一档案, ...

  5. HDU 5787 K-wolf Number (数位DP)

    K-wolf Number 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5787 Description Alice thinks an integ ...

  6. js获取服务端IP及端口及协议

    alert("location:"+window.location); alert("href: "+window.location.href); alert( ...

  7. MD5验证工具:md5sum

    linux 下 shell命令 ,制作md5码 也用于软件的md5校验     MD5算法常常被用来验证网络文件传输的完整性,防止文件被人篡改.MD5 全称是报文摘要算法(Message-Digest ...

  8. 11235 - Frequent values

    <算法竞赛入门经典-训练指南>P198 记录一下区间的左右边界就可以了 #include <iostream> #include <stack> #include ...

  9. SCOI2016滚粗记

    day0 又到了SCOI,照惯例赛前参加省选培训,住酒店但学校食堂很难吃. 省选培训被成七和南山的大爷虐翻,感觉进省队没什么戏,权当玩一玩吧. day1 早上醒的时候感觉脑袋很痛,想睡又睡不着,第二天 ...

  10. Chrome插件开发 尝试2

    在文章1中 尝试了开发chrome一个蛋疼的插件,而且必须要写 一坨令人费解的代码才能只能,今天来次清爽的开发:如图: 这是 "清爽模式" →_→ 我把popup.html与pop ...