; 本例子使用了JDK 以上的javax script包 通过Invocable接口实现JAVA调用JS脚本里的方法 本例中调用分为内部执行脚本和外部执行脚本 外部执行脚本分为不带参数调用和带参数调用 主要采用invokeFunction方法调用 ObjectinvokeFunction(String name Object… args) 用于调用脚本中定义的顶层程序和函数 ObjectinvokeMethod(Object thiz String name Object… args) 对以前的脚本执行中已经编译的脚本对象(以 ScriptEngine 的状态保持)调用某一方法 package de javase; import javax script Invocable; import javax script ScriptEngineManager; import javax script ScriptEngine; import java io File; import java io Reader; import java io FileReader; public class AjavaInvokingFunction { public static void main(String[] args) { // 获得一个JavaScript脚本引擎 也可以是ECMAScript脚本引擎 ScriptEngineManager manager = new ScriptEngineManager() ScriptEngine engine = manager getEngineByName( JavaScript ) String titlescript = function sayTitle() { + println( 源码实例 使用javax script调用JS脚本里的方法 ) + println( ) + } ; try {
// 调用内部脚本执行 engine eval(titlescript) // 转换为Invocable Invocable invocableEngine = (Invocable) engine; // 不带参数调用sayTitle方法 invocableEngine invokeFunction( sayTitle ) // 调用外部脚本执行 // 创建JS文件的File对象 并读入流 File functionscript = new File( ajava js ) Reader reader = new FileReader(functionscript) // 开始执行ajava js里的程序 engine eval(reader) // 不带参数调用sayHello方法 invocableEngine invokeFunction( sayHello ) // 带参数调用sayHello方法 invocableEngine invokeFunction( sayHello mark ) } catch (Exception e) { e printStackTrace() } } } ajava js文件 function sayHello(){ sayHello(null) } function sayHello(name){ if(name==null){ println( 欢迎你!请注册Ajava会员 ) }else{ println(name+ 独立JAVA社区欢迎你 ) } } 运行结果(控制台) 源码实例 使用javax script调用JS脚本里的方法 lishixinzhi/Article/program/Java/hx/201311/26436
有时候因为需要,我们想在Java中调用js方法,不再是像页面中一个事件触发,该如何做到呢?今天下午没事得时候小研究了下,现跟大家分享一下。不对之处,望大家指正,共同进步!
[java] view plain copy
/
加载脚本引擎,并在java中调用js方法
/
public void test2()
{
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = managergetEngineByName("JavaScript");
try {
String str="2&1";
Double d = (Double) engineeval(str);
Integer i=dintValue();
Systemoutprintln(i);
} catch (ScriptException ex) {
exprintStackTrace();
}
}
[java] view plain copy
/
在java中调用js,jdk16中有加载js引擎类,然后由它来调用js方法。
并通过JDK平台给script的方法中的形参赋值
/
public void test(String name)
{
ScriptEngineManager sem = new ScriptEngineManager();
/
semgetEngineByExtension(String extension)参数为js
semgetEngineByMimeType(String mimeType) 参数为application/javascript 或者text/javascript
semgetEngineByName(String shortName)参数为js或javascript或JavaScript
/
ScriptEngine se = semgetEngineByName("js");
try
{
String script = "function say(){ return 'hello,'"+name+"; }";
seeval(script);
Invocable inv2 = (Invocable) se;
String res=(String)inv2invokeFunction("say",name);
Systemoutprintln(res);
}
catch(Exception e)
{
eprintStackTrace();
}
}
[java] view plain copy
/
演示如何将java中对象作为js中全局变量,同时演示将file类赋给脚本语言,并获得其属性。
/
public void testScriptVariables()
{
ScriptEngineManager sem=new ScriptEngineManager();
ScriptEngine engine=semgetEngineByName("js");
File file=new File("c://1txt");
engineput("f", file);
try {
engineeval("println('path:'+fgetPath())");//无法使用alert方法
} catch (ScriptException e) {
eprintStackTrace();
}
}
[java] view plain copy
/
演示如何在java中如何通过线程来启动一个js方法
/
public void testScriptInterface() throws ScriptException
{
ScriptEngineManager sem=new ScriptEngineManager();
ScriptEngine engine=semgetEngineByName("js");
String script="var obj=new Object();objrun=function(){println('test thread')}";
engineeval(script);
Object obj=engineget("obj");//获取js中对象
Invocable inv=(Invocable)engine;
Runnable r=invgetInterface(obj,Runnableclass);
Thread t=new Thread(r);
tstart();
}
这样java就可以执行动态语言了,不过注意是jdk16版本的哦~
这样写不知道你能不能看懂,这个问题远标java就已经讲过这个题目了,希望能帮到你!
以上就是关于Java调用JS脚本里的方法全部的内容,包括:Java调用JS脚本里的方法、如何在java中调用js方法、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)