2011-09-20 90 views
38

我想建立一個小型產品,我想給一種功能,用戶可以在其中編寫腳本語言的一種JavaScript。我如何在Java中使用Javascript?

還可以從JavaScript能夠建立對象和調用方法。

有沒有這方面的框架?

+0

@Felix:一樣酷,因爲它是Node.js的無關與Java或Web瀏覽器,對不對? – maerics

+0

@maerics正確,但它可以提供一個控制檯來修補。它可以運行腳本。 OP沒有提及任何有關網頁瀏覽器的內容:) – Felix

+1

@Felix然後,「每個瀏覽器所擁有的JavaScript控制檯都是不相關的,而node.js不是Java,所以...似乎沒有 –

回答

33

Rhino是你在找什麼。

Rhino是一個開源的JavaScript實現,其編寫的代碼完全是 。它通常嵌入到Java應用程序中以向最終用戶提供腳本。

更新: 現在Nashorn,這是更高性能JavaScript引擎爲Java,可與jdk8。

+0

使用rhino我可以運行最基本的腳本結構與java對象一起...... –

+1

是的你可以。看到這裏:http://www.mozilla.org/rhino/ ScriptingJava.html – kunal

15

的Java包括scripting language extension package版本開始,6

Rhino project documentation for embedding a JavaScript interpreter in Java

[編輯]

這裏是你如何將Java對象到你的解釋腳本的一個小例子:

public class JS { 
    public static void main(String args[]) throws Exception { 
    ScriptEngine js = new ScriptEngineManager().getEngineByName("javascript"); 
    Bindings bindings = js.getBindings(ScriptContext.ENGINE_SCOPE); 
    bindings.put("stdout", System.out); 
    js.eval("stdout.println(Math.cos(Math.PI));"); 
    // Prints "-1.0" to the standard output stream. 
    } 
} 
+2

+1另請參閱這個小[ScriptEngine示例](http://stackoverflow.com/questions/7441625/how-to-find-a-button-source-in-awt-calculator-homework/7441804#7441804 )。 –

10

您可以使用的ScriptEngine,例如:

 

public class Main { 
    public static void main(String[] args) { 
     StringBuffer javascript = null; 
     ScriptEngine runtime = null; 

     try { 
      runtime = new ScriptEngineManager().getEngineByName("javascript"); 
      javascript = new StringBuffer(); 

      javascript.append("1 + 1"); 

      double result = (Double) runtime.eval(javascript.toString()); 

      System.out.println("Result: " + result); 
     } catch (Exception ex) { 
      System.out.println(ex.getMessage()); 
     } 
    } 
} 
 
+0

讓我試試....現在..... –

+0

這就像在javascript中評估和獲得結果在Java中。如果我想直接在javascript中使用java對象呢? ..... –

+0

閱讀文檔 - 在另一個答案中提供的Rhino鏈接在前幾段討論了這一點。 –

4

包含在JDK 6中的Rhino JavaScript引擎正在被新的引擎稱爲Nashorn JDK 8.

Oracle blog for Nashorn包含新聞以及源代碼示例。

6

Oracle Nashorn提供了Java和JavaScript世界之間的互操作性。這意味着您的Java代碼可以調用JavaScript代碼,反之亦然。 Basic tutorial瞭解如何使用Oracle Nashorn編寫程序。

0

我只是想回答這個問題的新東西 - J2V8

作者伊恩·布爾說:「犀牛和犀牛是兩種常見的JavaScript運行時間,但這些並不能滿足一些領域我們的要求:

既不支持的基本概念,「這些平臺的所有互動要求包裝類如Integer,Double或Boolean Android不支持Nashorn Android不支持Rhino編譯器優化 這兩種引擎都不支持Android上的遠程調試。「」

Highly Efficient Java & JavaScript Integration

Github link