Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
rhino的ScriptContext在用于任何JavaScript日期函数时引发异常_Javascript_Java_Rhino - Fatal编程技术网

rhino的ScriptContext在用于任何JavaScript日期函数时引发异常

rhino的ScriptContext在用于任何JavaScript日期函数时引发异常,javascript,java,rhino,Javascript,Java,Rhino,如果我尝试直接计算javascript日期函数,它的工作原理如下: ScriptEngineManager m = new ScriptEngineManager(); ScriptEngine engine = m.getEngineByName("rhino"); String script = "new Date().getUTCMonth()"; System.out.println(engine.eval(script)); 但是,如果我尝试使用ScriptContext对象,

如果我尝试直接计算javascript日期函数,它的工作原理如下:

ScriptEngineManager m = new ScriptEngineManager();
ScriptEngine engine = m.getEngineByName("rhino"); 
String  script = "new Date().getUTCMonth()"; 
System.out.println(engine.eval(script));
但是,如果我尝试使用ScriptContext对象,那么eval方法会出现异常。 下面是代码片段

 ScriptContext context1 = new SimpleScriptContext();
 context1.setAttribute("temp", new Date(), ScriptContext.ENGINE_SCOPE);
 String scriptUtcMonth = "temp.getUTCMonth()";
 System.out.println(engine.eval(scriptUtcMonth,context1));
例外情况是:

    Exception in thread "main" com.sun.phobos.script.util.ExtendedScriptException: org.mozilla.javascript.EcmaError: TypeError: Cannot find function getUTCMonth in object Thu Nov 26 13:54:01 IST 2015. (<Unknown source>#1) in <Unknown source> at line number 1
    at com.sun.phobos.script.javascript.RhinoScriptEngine.eval(RhinoScriptEngine.java:184)
    at com.sun.phobos.script.javascript.RhinoScriptEngine.eval(RhinoScriptEngine.java:198)
    at test.class1.main(class1.java:40)
Caused by: org.mozilla.javascript.EcmaError: TypeError: Cannot find function getUTCMonth in object Thu Nov 26 13:54:01 IST 2015. (<Unknown source>#1)
    at org.mozilla.javascript.ScriptRuntime.constructError(ScriptRuntime.java:3687)
    at org.mozilla.javascript.ScriptRuntime.constructError(ScriptRuntime.java:3665)
    at org.mozilla.javascript.ScriptRuntime.typeError(ScriptRuntime.java:3693)
    at org.mozilla.javascript.ScriptRuntime.typeError2(ScriptRuntime.java:3712)
    at org.mozilla.javascript.ScriptRuntime.notFunctionError(ScriptRuntime.java:3783)
    at org.mozilla.javascript.ScriptRuntime.getPropFunctionAndThisHelper(ScriptRuntime.java:2269)
    at org.mozilla.javascript.ScriptRuntime.getPropFunctionAndThis(ScriptRuntime.java:2251)
    at org.mozilla.javascript.optimizer.OptRuntime.callProp0(OptRuntime.java:83)
    at org.mozilla.javascript.gen._Unknown_source__11._c_script_0(<Unknown source>:1)
    at org.mozilla.javascript.gen._Unknown_source__11.call(<Unknown source>)
    at org.mozilla.javascript.ContextFactory.doTopCall(ContextFactory.java:394)
    at org.mozilla.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:3091)
    at org.mozilla.javascript.gen._Unknown_source__11.call(<Unknown source>)
    at org.mozilla.javascript.gen._Unknown_source__11.exec(<Unknown source>)
    at org.mozilla.javascript.Context.evaluateReader(Context.java:1110)
    at com.sun.phobos.script.javascript.RhinoScriptEngine.eval(RhinoScriptEngine.java:172)
    ... 2 more
线程“main”com.sun.phobos.script.util.ExtendedScriptException:org.mozilla.javascript.EcmaError:TypeError:在对象中找不到函数getUTCMonth Thu Nov 26 13:54:01 IST 2015。(#1)在第1行 位于com.sun.phobos.script.javascript.RhinoScriptEngine.eval(RhinoScriptEngine.java:184) 位于com.sun.phobos.script.javascript.RhinoScriptEngine.eval(RhinoScriptEngine.java:198) 在test.class1.main中(class1.java:40) 原因:org.mozilla.javascript.EcmaError:TypeError:在对象中找不到函数getUTCMonth Thu Nov 26 13:54:01 IST 2015。(#1) 位于org.mozilla.javascript.ScriptRuntime.constructError(ScriptRuntime.java:3687) 位于org.mozilla.javascript.ScriptRuntime.constructError(ScriptRuntime.java:3665) 位于org.mozilla.javascript.ScriptRuntime.typeError(ScriptRuntime.java:3693) 位于org.mozilla.javascript.ScriptRuntime.typeError2(ScriptRuntime.java:3712) 位于org.mozilla.javascript.ScriptRuntime.notFunctionError(ScriptRuntime.java:3783) 位于org.mozilla.javascript.ScriptRuntime.getPropFunctionAndThisHelper(ScriptRuntime.java:2269) 位于org.mozilla.javascript.ScriptRuntime.getPropFunctionAndThis(ScriptRuntime.java:2251) 位于org.mozilla.javascript.optimizer.OptRuntime.callProp0(OptRuntime.java:83) 在org.mozilla.javascript.gen._Unknown_source_11._c_script_0(:1) 在org.mozilla.javascript.gen._Unknown_source_uu11.call()上 位于org.mozilla.javascript.ContextFactory.doTopCall(ContextFactory.java:394) 位于org.mozilla.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:3091) 在org.mozilla.javascript.gen._Unknown_source_uu11.call()上 在org.mozilla.javascript.gen._Unknown_source_uu11.exec()上 位于org.mozilla.javascript.Context.evaluateReader(Context.java:1110) 位于com.sun.phobos.script.javascript.RhinoScriptEngine.eval(RhinoScriptEngine.java:172) ... 还有两个
A
java.util.Date
不会自动转换为JavaScript
Date
。所有从Java传递到JavaScript的对象都是直接访问的,因此它保持为
Java.util.Date
,而
Java.util.Date
没有
getUTCMonth()
方法。谢谢Andreas,我理解你的观点。那么,使用rhino计算javascript日期函数的可行方法是什么呢?最简单的方法是使用javascript:
newdate(temp.getTime()).getUTCMonth()
。在纳肖恩身上测试过,在犀牛身上也应该是一样的。。谢谢安德烈亚斯:)