我遇到一个问题,当我尝试使用 ScriptEngine eval 时,总是返回 0 值。通过使用 Logger,我能够确定正在生成 NullPointerExceptions。经过进一步检查,GAE 似乎并不总是返回有效的脚本引擎(如果有的话),因为当您尝试使用它时它会引发异常。
我的代码如下所示:
public double myEval(String JsFormulaStr ) {
double solutionValue = 0;
ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine eng = mgr.getEngineByName("JavaScript");
if(eng == null) { // Added this block of code to prevent java.lang.NullPointerException...
log.severe("Unable to get Script Engine." );
return 0;
}
try {
Object jsResults = eng.eval(JsFormulaStr);
solutionValue = Double.parseDouble(jsResults.toString());
return solutionValue;
} catch(Exception e) {
log.severe("[ERROR] in getCalculatedSolution_FromJS_ToDouble()::\n\t" +
"Formula String is: " + JsFormulaStr + "\n\t" + e);
return 0;
}
}
如果我将它作为 WebApp 在本地运行(在 Eclipse 和 Netbeans 中,以及在 Tomcat 和 Glassfish 4.0 中),一切正常。
我试图评估的一些字符串:
- 62.0 / 100
- 0.0 * 352.0
- (0 - 428) * 1000
- (0 - 597) * 1000
- 73.0 / 100
注意:0 或 0.0 来自其他在先前调用中失败的评估。由于此函数在错误时返回 0。
根据Google 的 JRE 类白名单,允许使用 ScriptEngineManager 和 ScriptEngine 类。所以我不明白为什么它没有按预期工作。
有什么建议么?
提前致谢,
兰迪