2013-04-25 80 views

回答

2

試試這個:

ScriptEngineManager mgr = new ScriptEngineManager(); 
ScriptEngine engine = mgr.getEngineByName("JavaScript"); 
String foo = "(3+4)*7/2"; 
double result=0; 
try { 
    /* 
    It seems that (on some platforms) this results in a java.lang.RuntimeException 
    because of converting Object to double, so let's replace it with 
    Double.doubleValue() 
    */ 
    //result = (double) (engine.eval(foo)); 
    result = ((Double) (engine.eval(foo))).doubleValue(); //result = 24.5 
} catch (ScriptException e) { 
    //handle exception here 
} 

UPDATE

在嘗試計算表達式,你應該測試是否「JavaScript的」 ScriptEngine的註冊您的系統上,你可以像下面這樣做:

ScriptEngineManager manager = new ScriptEngineManager(); 
List<ScriptEngineFactory> factories = manager.getEngineFactories(); 
for (ScriptEngineFactory factory : factories) { 
    System.out.println(factory.getNames()); 
} 

我的輸出

[js, rhino, JavaScript, javascript, ECMAScript, ecmascript] 

如果您的輸出中不包含JavaScript,然後用jsjavascript嘗試,像

ScriptEngine engine = mgr.getEngineByName("js"); 

ScriptEngine engine = mgr.getEngineByName("javascript"); 

如果沒有他們的存在,你不能用js爲腳本引擎來評估你的表達

+0

我試過這段代碼,它沒有編譯,不應該(雙)是(雙)?由於雙擴展對象,但雙重不 – 2013-04-25 11:16:09

+0

@Richtea不知道爲什麼它不編譯,在我的電腦上編譯沒有問題。檢查它是否生成ScriptException,如果是,那麼「JavaScript」不是JRE中已註冊的ScriptEngine。查看我的更新以瞭解如何列出可用的腳本引擎 – BackSlash 2013-04-25 11:25:31

+0

將(雙)更改爲(雙)它在netbeans中在我的PC上運行時沒有問題。使用(double)它會創建以下異常:線程「main」中的異常java.lang.RuntimeException:不可編譯的源代碼 - 不可變類型 必需:double found:java.lang.Object \t at test.ScratchSpace.main(Test的.java:22) Java結果:1倍 – 2013-04-25 11:32:47

相關問題