如何在java中调用js方法

Python032

如何在java中调用js方法,第1张

在Java中调用js文件中的function,传入调用参数,并获取返回值

js文件中的merge函数将两个参数a,b相加,并返回c。

// expression.js

function merge(a, b) {

c = a * b

return c

}

在Java代码中读取js文件,并参数两个参数,然后回去返回值。

package com.sinaapp.manjushri

import java.io.FileReader

import javax.script.Invocable

import javax.script.ScriptEngine

import javax.script.ScriptEngineManager

/** * Java调用并执行js文件,传递参数,并活动返回值 * * @author manjushri */

public class ScriptEngineTest {

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

ScriptEngineManager manager = new ScriptEngineManager()

ScriptEngine engine = manager.getEngineByName("javascript")

String jsFileName = "expression.js" // 读取js文件

FileReader reader = new FileReader(jsFileName) // 执行指定脚本

engine.eval(reader)

if(engine instanceof Invocable) {

Invocable invoke = (Invocable)engine // 调用merge方法,并传入两个参数

// c = merge(2, 3)

Double c = (Double)invoke.invokeFunction("merge", 2, 3)

System.out.println("c = " + c)

}

reader.close()

}

}

输出结果:

c = 5.0

可参考:

package javaIjs

/**

* @param args

*/

import java.io.FileReader

import javax.script.Invocable

import javax.script.ScriptEngine

import javax.script.ScriptEngineManager

/**

* Java调用并执行js文件,传递参数,并活动返回值

*

* @author manjushri

*/

public class ScriptEngineTest {

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

ScriptEngineManager manager = new ScriptEngineManager()

ScriptEngine engine = manager.getEngineByName("javascript")

String jsFileName = System.getProperty("user.dir")+"/src/javaIjs/expression.js"

// 读取js文件

FileReader reader = new FileReader(jsFileName)

// 执行指定脚本

System.out.println(engine.getContext().getReader())

engine.eval(reader)

if (engine instanceof Invocable) {

Invocable invoke = (Invocable) engine

// 调用merge方法,并传入两个参数

// c = merge(2, 3)

Double c = (Double) invoke.invokeFunction("merge1", 21, 3)

System.out.println("c = " + c)

}

reader.close()

}

}