2014-06-26 35 views
3

我有一個可以打開,讀取和寫入多個文件的java程序。它也包含複雜的邏輯格式。在Java類方法中嵌入JavaScript代碼段

現在我寫的jsfiddle一個簡單的JavaScript here做一些樹遍歷和解析對我來說,它比在Java中實現要容易得多。

我現在的挑戰是如何將這個JavaScript腳本「嵌入」到我的Java方法中。我主要是一個Java編碼器。

的Java方法僞代碼是這樣的:

<Java method begins……> 

     String input = 「ABC」 //its more complex than ABC 
     String o1= null; 
     //JavaScript script begins, 
      //Javascript evaluates the Java string input 
      //Javascript output is assigned to Java o1 
       o1 = output; 
     //Javascript script ends 

    //maniputate and process Java string o1 - which is not null 
<Java method ends> 
+0

http://stackoverflow.com/questions/7487908/how-can-i-use-javascript-in-java – JamesB

+1

腳本引擎Java 6中介紹:HTTP ://docs.oracle.com/javase/6/docs/api/javax/script/package-summary.html – JamesB

回答

2

與Java 8相當簡單。您可以使用Nashorn。

import javax.script.Invocable; 
import javax.script.ScriptEngine; 
import javax.script.ScriptEngineManager; 

public class JsTest { 

    @org.junit.Test 
    public void test() throws Exception { 
    ScriptEngine jsEngine = new ScriptEngineManager().getEngineByName("nashorn"); 
    jsEngine.eval("var say = function(name) {return 'Hello ' + name;}"); 

    Invocable jsScript = (Invocable) jsEngine; 

    Object result = jsScript.invokeFunction("say", "XYZ"); 
    System.out.println(result); 
    } 
} 

eval方法有各種可能的參數。也可以從文件加載腳本。

一個很好的教程,可以在這裏找到:http://winterbe.com/posts/2014/04/05/java8-nashorn-tutorial

+0

當我複製並粘貼代碼時,出現空指針錯誤。它失敗了'jsEngine.eval(「var say = function(name){return'Hello'+ name;}」);' – bouncingHippo

+0

你有JDK8嗎?在我的機器上完美無瑕地運行,無需任何外部代碼。我會認爲jsEngine是空的,因爲「nashorn」在舊的JDK中是未知的。 – spa

+0

ahhh假你說得對,我正在使用Java 6.我會嘗試安裝Java 8並希望它不會破壞我的環境 – bouncingHippo

1

你可以做兩件事情之一。

  1. 轉換的代碼轉換成Java。非常簡單,取決於代碼大小。主要需要將var更改爲鍵入的變量。

  2. 使用像Rhino這樣的Javascript引擎,您可以在其中輸入Javascript並獲得輸出結果。

+0

[And here](https://developer.mozilla.org/en-US/docs/Mozilla/項目/ Rhino/Embedding_tutorial#usingJSObjs)的具體犀牛文檔頁面 – blgt

+0

不知道它是否有幫助,但這裏的問題的JavaScript http://jsfiddle.net/DXs8p/47/ – bouncingHippo

0

就我個人而言,我會避免將JavaScript嵌入到您的Java代碼中,並使用標準Java來執行此操作。有多種可用於此的已經內置到Java中的字符串處理庫。

如果你正在使用String運算符和正則表達式在Java中無法執行你想要做的事情,我會感到非常驚訝。

我也會想到,將字符串傳遞給JavaScript以進行處理然後傳遞迴Java會有相當大的性能提升。這樣做會更有意義,更高效,可以在Java中完成。

不確定如何在JavaScript中嵌入JavaScript,但有JS庫可能值得關注(this link to Nashorn (a bit like Rhino) may help)。除非絕對必要,否則我會避免使用它。

+0

我同意,我試圖避免它。這裏是我的jsfiddle,以及我應該如何轉換成Java http://jsfiddle.net/DXs8p/47/ – bouncingHippo