如何在java中調用js方法


有時候因為需要,我們想在java中調用js方法,不再是像頁面中一個事件觸發,該如何做到呢?今天下午沒事得時候小研究了下,現跟大家分享一下。不對之處,望大家指正,共同進步!

?
/*
  * 加載腳本引擎,並在java中調用js方法
  */
public void test2()
{
      ScriptEngineManager manager = new ScriptEngineManager();
  
      ScriptEngine engine = manager.getEngineByName( "javascript" );
      try {
          String str= "2&1" ;
          Double d = (Double) engine.eval(str);
          Integer i=d.intValue();
          System.out.println(i);
      } catch (ScriptException ex) {
         ex.printStackTrace();
      }
  
}

 

?
/*
  * 在java中調用js,jdk1.6中有加載js引擎類,然后由它來調用js方法。
  * 並通過JDK平台給script的方法中的形參賦值  
  */
public void test(String name)
{
     ScriptEngineManager sem = new ScriptEngineManager(); 
     /*
      *sem.getEngineByExtension(String extension)參數為js   
       sem.getEngineByMimeType(String mimeType) 參數為application/javascript 或者text/javascript   
       sem.getEngineByName(String shortName)參數為js或javascript或JavaScript 
      */
     ScriptEngine se = sem.getEngineByName( "js" ); 
     try 
    
       String script = "function say(){ return 'hello,'" +name+ "; }" ;
       se.eval(script); 
       Invocable inv2 = (Invocable) se; 
       String res=(String)inv2.invokeFunction( "say" ,name); 
       System.out.println(res);
    
     catch (Exception e) 
    
         e.printStackTrace();
    
  
}

 

?
/*
  * 演示如何將java中對象作為js中全局變量,同時演示將file類賦給腳本語言,並獲得其屬性。
  */
public void testScriptVariables()
{
     ScriptEngineManager sem= new ScriptEngineManager();
     ScriptEngine engine=sem.getEngineByName( "js" );
     File file= new File( "c:\\1.txt" );
     engine.put( "f" , file);
     try {
         engine.eval( "println('path:'+f.getPath())" ); //無法使用alert方法
     } catch (ScriptException e) {
         e.printStackTrace();
     }
      
}

 

?
/*
  * 演示如何在java中如何通過線程來啟動一個js方法
  */
public void testScriptInterface() throws ScriptException
{
     ScriptEngineManager sem= new ScriptEngineManager();
     ScriptEngine engine=sem.getEngineByName( "js" );
     String script= "var obj=new Object();obj.run=function(){println('test thread')}" ;
     engine.eval(script);
     Object obj=engine.get( "obj" ); //獲取js中對象
     Invocable inv=(Invocable)engine;
     Runnable r=inv.getInterface(obj,Runnable. class );
     Thread t= new Thread(r);
     t.start();
      
}

 

這樣java就可以執行動態語言了,不過注意是jdk1.6版本的哦~

轉載:http://www.cnblogs.com/huangjingzhou/articles/2049043.html

推薦文章:

http://www.iteye.com/topic/492487


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM