2013-04-25 81 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

相关问题