首先我们在D盘的根目录下有一个js文件 名叫 common.js 假设里面有一个这样的方法

/**
 * @param int
 *            _number 你想要的最大值
 * @param boolean
 *            是否从0开始
 * @param int
 *            需要选择个数
 * @param boolean是否可以有重复值
 * @return String 如_radom(33,false,6,false)返回值可能是 5 22 33 12 7 9
 */
function __random(_number, isStartBy0, _nums, theSame) {
 var nums = [];
 var count = nums.length;
 var str = "";
 var flag = false;

for ( var i = 0; i < _nums; i++) {
  if (isStartBy0)
   var idx = Math.floor(Math.random() * (_number + 1));
  else
   var idx = Math.floor(Math.random() * _number + 1);
  // 1 / 0 - _number
  if (theSame) {
   nums[nums.length] = idx;
   str += nums[i] + " ";
  } else {
   if (nums.length == 0) {
    nums[0] = idx;
    str += nums[0] + " ";
   } else {
    for ( var j = 0; j < nums.length; j++) {
     if (idx == nums[j]) {
      flag = true;
      i = nums.length - 1;
      break;
     }
    }
    if (!flag) {
     nums[i] = idx;
     str += nums[i] + " ";
    }
   }
   flag = false;
  }
 }
 return str;
}

如果我们需要在java中调用这段代码

import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;

import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;

public class TestScript {
 public static void main(String[] args) throws Exception {

// 创建一个 ScriptEngineManager
  ScriptEngineManager m = new ScriptEngineManager();
  // 得到javascript引擎
  ScriptEngine engine = m.getEngineByName("js");
  // 绑定引擎
  engine.put("engine", engine);

// 执行script代码 调用下面的方法
  TestScript.eval(engine, "d://common.js");

}

private static void eval(ScriptEngine engine, String name) throws Exception {
  // InputStream is = TestScript.class.getResourceAsStream("/resources/" +
  // name);
  InputStream is = new FileInputStream(name);

// 这一句是为了更好的错误消息输出
  // engine.put(ScriptEngine.NAME, name);

// 执行io流中的javascript代码
  engine.eval(new InputStreamReader(is));
  Invocable inv = (Invocable) engine;
  // 执行方法并传递参数
  // _number, isStartBy0, _nums, theSame
  Object[] c = { 33, false, 6, false };
  Object obj = inv.invokeFunction("__random", c);
  // 打印结果
  System.out.println(obj);
 }

}

java 调用javascript的更多相关文章

  1. Java调用Javascript、Python算法总结

    最近项目中经常需要将Javascript或者Python中的算法发布为服务,而发布Tomcat服务则需要在Java中调用这些算法,因此就不免要进行跨语言调用,即在Java程序中调用这些算法. 不管是调 ...

  2. [转]Java调用Javascript、Python算法总结

    最近项目中经常需要将Javascript或者Python中的算法发布为服务,而发布Tomcat服务则需要在Java中调用这些算法,因此就不免要进行跨语言调用,即在Java程序中调用这些算法. 不管是调 ...

  3. Java 调用 Javascript 函数的范例

    在Java 7 以后,可以在Java代码中调用javascript中的函数,请看下面的例子: package com.lee; import java.io.FileNotFoundException ...

  4. Selenium+java - 调用JavaScript操作

    前言 在做web自动化时,有些情况selenium的api无法完成,需要通过第三方手段比如js来完成实现,比如去改变某些元素对象的属性或者进行一些特殊的操作,本文将来讲解怎样来调用JavaScript ...

  5. Java调用JavaScript

    1.main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:a ...

  6. 从Java 调用JavaScript

    篇幅过长 下载资源链接https://www.slidestalk.com/s/java_javascript_5hl09w

  7. WebView上实现Java与JavaScript交互

    在安卓开发上,考虑到开发效率和界面更新,有时使用WebView结合web页面技术,可以快速迭代地开发移动应用.WebView加载资源的速度并不慢,但是如果资源多了,就很慢.图片.css.js.html ...

  8. Android-WebView与本地HTML (Java调用--->HTML的方法)

    上一篇博客 Android-WebView与本地HTML (HTML调用-->Java的方法) 介绍了 JavaScript 调用--> Java中的方法,而此篇博客是介绍 Java 调用 ...

  9. JAVA调用操作javascript (JS)工具类

    import java.io.BufferedReader;import java.io.FileNotFoundException;import java.io.FileReader;import ...

随机推荐

  1. 1、linux软件包管理

    linux软件包管理分为两种:RPM包管理和源码包管理,其中RPM包管理又有两种方式:①RPM命令管理,②YUM在线命令管理. RPM包依赖关系: 1.树形依赖 2.环形依赖 (用一条命令同时装来解决 ...

  2. 用python3判断一个字符串 包含 中文

    在python中一个汉字算一个字符,一个英文字母算一个字符 用 ord() 函数判断单个字符的unicode编码是否大于255即可. s = '我xx们的88工作和生rr活168' n = 0 for ...

  3. 汉字转拼音开源工具包Jpinyin介绍

    最近要实现一个根据词语得到词语对应拼音的功能,找到了Jpinyin这个开源工具包,使用下来发现它非常强大,完全满足我的需求,下面对它做一个简单的介绍,希望能够帮助到有需要的朋友. https://gi ...

  4. From Ruby array to JS array in Rails- 'quote'?

    From Ruby array to JS array in Rails- 'quote'? <%= raw @location_list.as_json %>

  5. MaxScript 学习笔记【有转载】

    1. string string类型的变量是一个数组,下列操作合法:strName = $.name -- output: "Shemmy_03" strName[1] --得到字 ...

  6. 【315】Windows 之间代码自动传文件

    对于 Windows 内部自动复制/移动文件可以通过 批处理 来完成,对于不同的电脑之间的实现也是相同的方法,但是需要将一台电脑的对应文件夹设置成 共享,只要在另一台电脑能够直接访问共享的文件夹,就可 ...

  7. 通过devtools在centos系统中启用高版本的gcc

    C++11出来好久了,现在还是使用c++03的,需要在centos6.6的系统上实现gcc的升级,又不想自己编译代码. 于是选用了devtoolsset系列,安装脚本如下 安装脚本如下 functio ...

  8. 关于Excel无法打开,因为文件格式或文件扩展名无效的解决方法

    可能有网友也遇到过跟我一样的情况,新建的excel一打开就弹出 这样的错误. 这是因为excel打开的时候会去指定的文件夹找一个模板,以这个模板的样式打开新建的ecxel.所以如果excel打开的时候 ...

  9. 字符图元 & 显示列表

    [字符图元] 1.typeface(字样),即设计风格,如Courier等. 2.font(字体),如10磅Courier斜体. 3.monspace即为等宽字体,proportional为非等宽字体 ...

  10. 【POJ1284】Primitive Roots

    [题目大意] 给你一个素数n,求n的原根个数. [题解] 关于原根有一个定理: 定理:如果模有原根,那么它一共有个原根. 所以这题就是求phi[phi[n]] 很简单吧...(如果知道这个定理的话) ...