2011-01-28 70 views
2

正如書名所描述的,我想實現如下:如何從JavaScript調用Java方法

  1. 創建Java對象
  2. 將其傳遞給JavaScript
  3. 調用方法(一傳遞的對象
  4. 上二傳手例如)繼續工作與對象在Java

我使用包含在Java腳本。 如果有人能幫助我,我會很高興。

回答

5

如果您正在使用ScriptEngine框架,這非常簡單。你可以在「傳遞」 Java對象到JavaScript的方式有兩種:

  1. 你可以在「種子」的執行環境的JavaScript代碼,並安排將Java對象僅僅是「有」,在全局命名空間
  2. 你可以將Java對象作爲參數傳遞給JavaScript函數。

您還可以從JavaScript訪問Java構造函數,並根據需要實例化Java對象。

要做第一件事,你必須爲腳本引擎設置「綁定」。這就像一個地圖:

final Bindings globals = engine.createBindings(); 
globals.put("foo", yourObject); 

現在,當JavaScript代碼在引擎運行,全局符號「foo」將被作爲一個Java對象的引用。你可以綁定儘可能多的引用,只要你喜歡。

如果您想將Java對象作爲參數傳遞給JavaScript函數,您首先需要的是通過調用 JavaScript函數。要做到這一點,您可以使用「invokeFunction」或「invokeMethod中」法經「Invocable的」界面曝光:

final Object result = ((Invocable) engine).invokeMethod(context, methodName, arg, arg, ...); 

的「上下文」還有就是你想this指東西參考功能這就是所謂的。 「methodName」只是一個給出全局JavaScript函數名稱的字符串。

Java類通過它們完全合格的路徑名可用於JavaScript環境:

var javaHashMap = new java.util.HashMap(); 

這會給你一個Java HashMap實例JavaScript變數。

+0

你能爲此提供一個簡單的代碼嗎?現在我用鍵和對象「放」,但不知道這是否是你說的方式。我有另一個問題 - importPackage。我知道在犀牛中你只需添加scope = new ImporterTopLevel(cx),但是我怎麼才能在ScriptEngine中實現這一點? – o15a3d4l11s2 2011-01-28 14:43:27

相關問題