我有一个问题,我总是得到一个返回值为0时,我尝试使用,该ScriptEngine的eval。 通过使用记录仪,我能够确定有产生NullPointerException异常。 经进一步检查,似乎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;
}
}
如果我在本地运行的Web应用程序(无论在Eclipse和Netbeans的。而在Tomcat和Glassfish的4.0),一切工作正常。
其中一些我试图使用eval字符串:
- 62.0 / 100
- 0.0 * 352.0
- (0 - 428)* 1000
- (0 - 597)* 1000
- 73.0 / 100
注意:0的或0.0的是从失败的所有以前的调用其他评价。 由于这种功能上的错误返回0。
根据谷歌的JRE类白名单 ,对于ScriptEngineManager ScriptEngine中和类是允许的。 因此,我不明白为什么它无法按预期工作。
有什么建议么?
提前致谢,
兰迪