2015-06-02 46 views
0

我是GWT的巨大粉絲(將Java轉換爲在瀏覽器中運行的JavaScript),但是有沒有將Java轉換爲JavaScript以在JVM中運行的任何工具通過Nashorn或Rhino)?將Java轉換爲在JVM上運行的JavaScript

更新

更多信息...我探索的想法是編譯後端代碼爲JavaScript,然後將其存儲在數據庫中。然後,Web應用程序可以將後端「模塊」拉出數據庫並在服務器上執行它。

更新

我沒有張貼此作爲一個答案,因爲我懷疑這是一個好主意,但出於好奇我試圖在JVM上運行GWT生成的JavaScript。在「詳細」級別編譯時,我不得不模擬3個GWT期望存在的DOM對象(hack!),但它確實有效。

Test.gwt.xml

<module rename-to='test'> 
    <entry-point class='test.client.Test'/> 
    <source path='client'/> 
    <source path='shared'/> 
    <super-source path="jre"></super-source> 
    <add-linker name="xsiframe"/> 
</module> 

...注意超源JRE ...

測試/客戶/ Test.java

public class Test implements EntryPoint { 
    public void onModuleLoad() { 
    print("" + new File("/Users/.../someFile.txt").exists()); 
    print("Hey"); 
    } 

    public native void print(String msg) /*-{ 
    print(msg); 
    }-*/; 
} 

...的嘲笑文件類...

test/jre/java/io/File.java

public class File { 

    public File(String name) { 
    _init(name); 
    } 

    private native void _init(String name) /*-{ 
    this._obj = new java.io.File(name); 
    }-*/; 

    public native boolean exists() /*-{ 
    return this._obj.exists(); 
    }-*/; 
} 

測試/ RhinoTest.java

public class RhinoTest { 
    public static void main(String[] args) throws IOException, ScriptException { 
    String js = FileUtils.readFileToString(new File("/Users/.../Test/war/test/130CD4F977EDEB096DFEF9871580F1CD.cache.js")); 
    js = "var $wnd = { test: { __sendStats: function() {} } };" 
     + js; 
    new ScriptEngineManager().getEngineByName("JavaScript").eval(js); 
    } 
} 

產地:

trueHey 
+0

Rhino將js編譯爲類,您可以提供Applet運行時(用於安全性)並直接運行編譯後的Java代碼。 – thst

+0

我剛剛更新了我的問題,提供了有關我的用例的更多信息。我需要在服務器上運行這個,而不是在瀏覽器中運行。除非你知道我沒有的東西,否則在服務器上運行applet並不比在動態加載jar並運行它更容易。 – Stinky

+0

你爲什麼不寫JavaScript? –

回答

0

Java和JavaScript是像汽車和地毯類似的是相似的。

你不會找到一個通用的解決方案,事件之一沒有複雜的代碼錯誤。

我道歉,但最好的和最快的解決方案是手動的,一步一步的,因爲你會花費太多的時間在調試和手動調整。