如何在java中调用js方法(转)

本文介绍如何在Java中调用JavaScript方法,包括加载JS引擎、执行JS代码、传递Java对象到JS及通过线程启动JS方法等实用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

出自:http://blog.youkuaiyun.com/haoren_e/article/details/5299538

 

有时候因为需要,我们想在java中调用js方法,不再是像页面中一个事件触发,该如何做到呢?今天下午没事得时候小研究了下,现跟大家分享一下。不对之处,望大家指正,共同进步!

   

  1. /* 
  2.  * 加载脚本引擎,并在java中调用js方法 
  3.  */  
  4. public void test2()  
  5. {  
  6.      ScriptEngineManager manager = new ScriptEngineManager();  
  7.   
  8.      ScriptEngine engine = manager.getEngineByName("javascript");  
  9.      try {  
  10.          String str="2&1";  
  11.          Double d = (Double) engine.eval(str);  
  12.          Integer i=d.intValue();  
  13.          System.out.println(i);  
  14.      } catch (ScriptException ex) {  
  15.         ex.printStackTrace();  
  16.      }  
  17.   
  18. }  

   

  1. /* 
  2.  * 在java中调用js,jdk1.6中有加载js引擎类,然后由它来调用js方法。 
  3.  * 并通过JDK平台给script的方法中的形参赋值   
  4.  */  
  5. public void test(String name)  
  6. {  
  7.     ScriptEngineManager sem = new ScriptEngineManager();   
  8.     /* 
  9.      *sem.getEngineByExtension(String extension)参数为js    
  10.       sem.getEngineByMimeType(String mimeType) 参数为application/javascript 或者text/javascript    
  11.       sem.getEngineByName(String shortName)参数为js或javascript或JavaScript  
  12.      */  
  13.     ScriptEngine se = sem.getEngineByName("js");   
  14.     try   
  15.     {   
  16.       String script = "function say(){ return 'hello,'"+name+"; }";  
  17.       se.eval(script);   
  18.       Invocable inv2 = (Invocable) se;   
  19.       String res=(String)inv2.invokeFunction("say",name);   
  20.       System.out.println(res);  
  21.     }   
  22.     catch(Exception e)   
  23.     {   
  24.         e.printStackTrace();  
  25.     }   
  26.   
  27. }  

   

  1. /* 
  2.  * 演示如何将java中对象作为js中全局变量,同时演示将file类赋给脚本语言,并获得其属性。 
  3.  */  
  4. public void testScriptVariables()  
  5. {  
  6.     ScriptEngineManager sem=new ScriptEngineManager();  
  7.     ScriptEngine engine=sem.getEngineByName("js");  
  8.     File file=new File("c://1.txt");  
  9.     engine.put("f", file);  
  10.     try {  
  11.         engine.eval("println('path:'+f.getPath())");//无法使用alert方法  
  12.     } catch (ScriptException e) {  
  13.         e.printStackTrace();  
  14.     }  
  15.       
  16. }  

   

  1. /* 
  2.  * 演示如何在java中如何通过线程来启动一个js方法 
  3.  */  
  4. public void testScriptInterface() throws ScriptException  
  5. {  
  6.     ScriptEngineManager sem=new ScriptEngineManager();  
  7.     ScriptEngine engine=sem.getEngineByName("js");  
  8.     String script="var obj=new Object();obj.run=function(){println('test thread')}";  
  9.     engine.eval(script);  
  10.     Object obj=engine.get("obj");//获取js中对象  
  11.     Invocable inv=(Invocable)engine;  
  12.     Runnable r=inv.getInterface(obj,Runnable.class);  
  13.     Thread t=new Thread(r);  
  14.     t.start();  
  15.       
  16. }  

 

这样java就可以执行动态语言了,不过注意是jdk1.6版本的哦~

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值