import junit.framework.TestCase; import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
import javax.swing.JButton;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.stream.Collectors; public class CallJs extends TestCase {
public void testConsoleLog() throws ScriptException {
ScriptEngine engine = new ScriptEngineManager().getEngineByExtension("js");
//此处会抛出异常,Java的script引擎并不包含console对象
engine.eval("console.log('hello world')");
} public void testConsoleLog2() throws ScriptException {
ScriptEngine engine = new ScriptEngineManager().getEngineByExtension("js");
engine.put("console", System.out);
//此处会抛出异常,Java的script引擎并不包含console对象
engine.eval("console.println('hello world')");
} public void testUseJsFunction() throws ScriptException {
ScriptEngine engine = new ScriptEngineManager().getEngineByExtension("js");
engine.eval("function add(x,y){return x+y}");
Object value = engine.eval("add(3,7)");
System.out.println(value.getClass() + " " + value);
} /**
* 注意,这个内部类必须是public否则js编译器看不见
*/
public class SubWrapper {
public int sub(int x, int y) {
return x - y;
}
} public void testUseJsFile() throws IOException, ScriptException {
ScriptEngine engine = new ScriptEngineManager().getEngineByExtension("js");
InputStream cin = getClass().getResourceAsStream("/calljs.js");
InputStreamReader reader = new InputStreamReader(cin);
engine.put("subWrapper", new SubWrapper());
engine.eval(reader);
engine.put("console", System.out);
System.out.println(engine.eval("add(3,4)"));
System.out.println(engine.eval("sub(5,6)"));
} public void testUpdateJavaObject() throws ScriptException {
JButton button = new JButton();
ScriptEngine engine = new ScriptEngineManager().getEngineByExtension("js");
engine.put("button", button);
engine.eval("button.text='hello world'");
System.out.println(button.getText());
} public void testlistAllScriptEngine() {
//列出全部脚本引擎
new ScriptEngineManager().getEngineFactories().forEach(fac -> {
System.out.println("name " + fac.getEngineName()
+ "\nlanguage " + fac.getLanguageName()
+ "\nversion " + fac.getEngineVersion()
+ "\nlanguageVersion " + fac.getLanguageVersion()
+ "\nextensions " + fac.getExtensions().stream().collect(Collectors.joining(","))
+ "\nmimetypes " + fac.getMimeTypes().stream().collect(Collectors.joining(","))
+ "\n"
);
});
} }

js

function add(x, y) {
return x + y
} function sub(x,y){
return subWrapper.sub(x,y)
}

使用Java调用JS的更多相关文章

  1. java调用js脚本

    有些情况下,需要java去调用js,groovy等脚本语言,传入参数获取脚本运行的结果. js脚本例子: function add(a,b){ return a + b + number; } jav ...

  2. java调用js代码

    jdk8里使用脚本引擎调用js 1.定义一个js方法: function getRouteInfo(province){ //注意,参数不要带var..在java里执行会报错.. if (provin ...

  3. java调用js脚本语言

    在我们开发的过程中,可能有这么一种情况,在java中需要取调用js方法完成一些事情.那么什么时候可能出现这种情况呢.比如我们使用爬虫模拟登录别的网站,但有些网站前台使用js对密码进行了加密处理,那么就 ...

  4. java调用js函数

    问题:js函数可能有多个,之间有相互调用关系,有jquery jar包 org.mozilla.javascript-1.7.2 js   envjs-1.2.js java代码 import jav ...

  5. gwt中java与js的相互调用

    1. java通过jsni调用内部js Button button = new Button("java调用内部jsni的js方法"); button.addClickHandle ...

  6. java与js交互,相互调用传参

    随着前端技术的发展与H5的广泛使用,移动端采用native+h5的方式越来越多了,对于Android来说就涉及到java与js的交互,相互调用传参等.下面就来看一下java与js交互的简单demo. ...

  7. Android WebView加载本地html并实现Java与JS交互

    最近做的一个项目中,用到自定义地图,将自定义地图转换成html页面,现在需要做的是如何将本地的html加载到android中,并可以实现交互. 相关讲解: 其实webview加载资源的速度并不慢,但是 ...

  8. Android与H5交互(java与js的交互)

    一.理论概述 1.js调用java方法 直接调用WebView的该方法就可以添加接口了,不过先要启动交互 // 启用javascript mWebView.getSettings().setJavaS ...

  9. android webview js交互 第一节 (java和js交互)

    转载请注明出处         挺帅的移动开发专栏  http://blog.csdn.net/wangtingshuai/article/details/8631835        在androi ...

随机推荐

  1. QMUI UI库 控件 弹窗 列表 工具类 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  2. 超酷实用的jQuery焦点图赏析及源码

    焦点图应用在现代网页中使用十分广泛,有注重简单小巧的,也有注重华丽美观的,大部分jQuery焦点图都可以滑动和切换图片,并且在切换图片时产生不同的动画特效.今天我们要分享一些超酷而且实用的jQuery ...

  3. 解剖android中的闹钟app 一

    首先,看一看android市场上有哪些主流的闹钟app了,我们来进行一个简单的评测: 一.正点闹钟 这是一款源自金山技术的闹钟app,其主力创始团队都是来自于金山,其装机量,下载量都是排名第一.老样子 ...

  4. chrome中打开 swf下载的问题

    https://helpx.adobe.com/cn/flash-player/kb/enabling-flash-player-chrome.html 1. 在地址栏中,键入 chrome://se ...

  5. CHtmlEditCtrl(1) : Use CHtmlEditCtrl to Create a Simple HTML Editor

    I needed a lightweight HTML editor to generate "rich text" emails, so I decided to explore ...

  6. Android 自定义 ListView 上下拉动“刷新最新”和“加载更多”歌曲列表

    本文内容 环境 测试数据 项目结构 演示 参考资料 本文演示,上拉刷新最新的歌曲列表,和下拉加载更多的歌曲列表.所谓"刷新最新"和"加载更多"是指日期.演示代码 ...

  7. Server Performance Advisor (SPA) 3.0

    http://blogs.technet.com/b/windows-server-china-blog/archive/2013/03/26/server-performance-advisor-s ...

  8. postman添加cookie

    检索cookie: 1.启动拦截器(需安装Postman Interceptor) 2.在测试部分,你可以使用responseCookies对象,他将返回一个cookie对象的数组.使用postman ...

  9. ArchLinux 启动等待1分半的问题

    细致看,原来在等待一个磁盘分区,UUID是我的swap分区,在 /etc/fstab中能够看到 # /dev/nvme0n1p2 UUID=3c5c07fe-e4d8-4248-9820-7b9310 ...

  10. having 与where 的异同点

    having 与where 的异同点: where针对表中的列发挥作用,查询数据 having对查询结果中的列发挥作用,筛选数据 #查询本店商品价格比市场价低多少钱,输出低200元以上的商品 ; // ...