2010-03-03 44 views
1

我正在使用Java腳本引擎(在Java 1.6中)來動態評估我的Java程序中的某些表達式。我可以將Java對象從Java傳遞到JavaScript,並調用它們的方法,但是當我傳遞String對象時,這會停止正常工作。如何從傳遞給JavaScript的字符串變量訪問Java字符串方法?

例如,在我的Java中,我可以用doSomething方法定義一個類JavaClass。 當我將JavaClass對象傳遞給JavaSCript時,我可以調用doSomething方法。但是,如果我在Java中創建一個String對象並將其傳遞給JavaScript,那麼當我嘗試使用JavaScript調用其上的endsWith方法時會出現錯誤。

我的代碼如下: -

ScriptEngineManager manager = new ScriptEngineManager(); 
ScriptEngine engine = manager.getEngineByName("JavaScript"); 
String myString = "apple hello"; 
JavaClass javaClass = new JavaClass(); 
engine.put("myString", myString); 
engine.put("thing", javaClass); 
engine.eval("thing.doSomething()"); 
engine.eval("myString.endsWith(\"hello\")"); 

的DoSomething的方法正確調用,但它無法找到的endsWith: -

__EXCEPTION__:javax.script.ScriptException: sun.org.mozilla.javascript.internal.EcmaError: TypeError: Cannot find function endsWith. 

這是因爲如果我的Java String對象被轉換到JavaScript字符串對象 - 例如,我可以使用JavaScript字符串的length屬性。

我可以添加自己的endsWith函數來我JavaClass類,它只是簡單地調用字符串的endsWith,這工作正常 - 但不是很好... :(

如果正在轉換,可以阻止我出現這種情況? 如果是別的東西,我是不是做錯了什麼?有沒有辦法解決呢?

謝謝!:)

回答

1

更改的最後一行到這一點。默認情況下,字符串會自動在Java和JS類型之間轉換。因此,您必須在您的JS代碼內強制轉換myString爲Java字符串。

engine.eval("new java.lang.String(myString).endsWith(\"hello\")"); 
相關問題