使用Java1.7编写Rhino代码,并使用Java1.8执行Exeception
我的应用程序使用Rhino混合javascript代码和Java对象 JVM 1.5、1.6和1.7的每一项功能都非常好,但在运行时使用JVM 1.8.0时会产生一个错误的ArrayIndexOutOfBoundsException:使用Java1.7编写Rhino代码,并使用Java1.8执行Exeception,java,java-8,rhino,retrotranslator,Java,Java 8,Rhino,Retrotranslator,我的应用程序使用Rhino混合javascript代码和Java对象 JVM 1.5、1.6和1.7的每一项功能都非常好,但在运行时使用JVM 1.8.0时会产生一个错误的ArrayIndexOutOfBoundsException: import org.mozilla.javascript.Context; import org.mozilla.javascript.Scriptable; public class RhinoOn8 { static public void ma
import org.mozilla.javascript.Context;
import org.mozilla.javascript.Scriptable;
public class RhinoOn8 {
static public void main(String[] args) throws SecurityException, NoSuchMethodException {
Context ctx = Context.enter();
Scriptable scope = ctx.initStandardObjects();
Object ev = ctx.evaluateString(scope, "'' + java.lang.System.getProperty(\"user.name\")", "exec", 0, null);
System.out.println(ev);
Context.exit();
}
}
在JVM Oracle 1.7.0_55上运行良好,并在JVM Oracle 1.8.0_31上执行此操作:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5747
at org.mozilla.javascript.net.sf.retrotranslator.runtime.asm.ClassReader.readClass(ClassReader.java:1572)
at org.mozilla.javascript.net.sf.retrotranslator.runtime.asm.ClassReader.accept(ClassReader.java:341)
at org.mozilla.javascript.net.sf.retrotranslator.runtime.asm.ClassReader.accept(ClassReader.java:300)
at org.mozilla.javascript.net.sf.retrotranslator.runtime.impl.ClassDescriptor.<init>(ClassDescriptor.java:67)
at org.mozilla.javascript.net.sf.retrotranslator.runtime.impl.ClassDescriptor.getInstance(ClassDescriptor.java:82)
at org.mozilla.javascript.net.sf.retrotranslator.runtime.impl.MethodDescriptor.getInstance(MethodDescriptor.java:120)
at org.mozilla.javascript.net.sf.retrotranslator.runtime.java.lang.reflect._Method.isVarArgs(_Method.java:96)
at org.mozilla.javascript.jdk15.VMBridge_jdk15.isVarArgs(VMBridge_jdk15.java:33)
at org.mozilla.javascript.MemberBox.init(MemberBox.java:44)
at org.mozilla.javascript.MemberBox.<init>(MemberBox.java:32)
at org.mozilla.javascript.JavaMembers.reflect(JavaMembers.java:455)
at org.mozilla.javascript.JavaMembers.<init>(JavaMembers.java:43)
at org.mozilla.javascript.JavaMembers.lookupClass(JavaMembers.java:807)
at org.mozilla.javascript.NativeJavaObject.initMembers(NativeJavaObject.java:54)
at org.mozilla.javascript.NativeJavaObject.<init>(NativeJavaObject.java:44)
at org.mozilla.javascript.NativeJavaObject.<init>(NativeJavaObject.java:34)
at org.mozilla.javascript.WrapFactory.wrapAsJavaObject(WrapFactory.java:115)
at org.mozilla.javascript.WrapFactory.wrap(WrapFactory.java:72)
at org.mozilla.javascript.NativeJavaMethod.call(NativeJavaMethod.java:236)
at org.mozilla.javascript.optimizer.OptRuntime.call1(OptRuntime.java:32)
at org.mozilla.javascript.gen.exec_1._c_script_0(exec:0)
at org.mozilla.javascript.gen.exec_1.call(exec)
at org.mozilla.javascript.ContextFactory.doTopCall(ContextFactory.java:394)
at org.mozilla.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:3091)
at org.mozilla.javascript.gen.exec_1.call(exec)
at org.mozilla.javascript.gen.exec_1.exec(exec)
at org.mozilla.javascript.Context.evaluateString(Context.java:1079)
at RhinoOn8.main(RhinoOn8.java:12)
线程“main”java.lang.ArrayIndexOutOfBoundsException中的异常:5747
位于org.mozilla.javascript.net.sf.retrotranslator.runtime.asm.ClassReader.readClass(ClassReader.java:1572)
位于org.mozilla.javascript.net.sf.retrotranslator.runtime.asm.ClassReader.accept(ClassReader.java:341)
位于org.mozilla.javascript.net.sf.retrotranslator.runtime.asm.ClassReader.accept(ClassReader.java:300)
位于org.mozilla.javascript.net.sf.retrotranslator.runtime.impl.ClassDescriptor.(ClassDescriptor.java:67)
位于org.mozilla.javascript.net.sf.retrotranslator.runtime.impl.ClassDescriptor.getInstance(ClassDescriptor.java:82)
位于org.mozilla.javascript.net.sf.retrotranslator.runtime.impl.MethodDescriptor.getInstance(MethodDescriptor.java:120)
位于org.mozilla.javascript.net.sf.retrotranslator.runtime.java.lang.reflect._Method.isVarArgs(_Method.java:96)
位于org.mozilla.javascript.jdk15.VMBridge_jdk15.isVarArgs(VMBridge_jdk15.java:33)
位于org.mozilla.javascript.MemberBox.init(MemberBox.java:44)
位于org.mozilla.javascript.MemberBox(MemberBox.java:32)
位于org.mozilla.javascript.JavaMembers.reflect(JavaMembers.java:455)
位于org.mozilla.javascript.JavaMembers。(JavaMembers.java:43)
位于org.mozilla.javascript.JavaMembers.lookupClass(JavaMembers.java:807)
位于org.mozilla.javascript.NativeJavaObject.initMembers(NativeJavaObject.java:54)
位于org.mozilla.javascript.NativeJavaObject.(NativeJavaObject.java:44)
位于org.mozilla.javascript.NativeJavaObject.(NativeJavaObject.java:34)
位于org.mozilla.javascript.WrapFactory.wrapAsJavaObject(WrapFactory.java:115)
位于org.mozilla.javascript.WrapFactory.wrap(WrapFactory.java:72)
位于org.mozilla.javascript.NativeJavaMethod.call(NativeJavaMethod.java:236)
位于org.mozilla.javascript.optimizer.OptRuntime.call1(OptRuntime.java:32)
在org.mozilla.javascript.gen.exec_1._c_script_0(exec:0)
访问org.mozilla.javascript.gen.exec_1.call(exec)
位于org.mozilla.javascript.ContextFactory.doTopCall(ContextFactory.java:394)
位于org.mozilla.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:3091)
访问org.mozilla.javascript.gen.exec_1.call(exec)
位于org.mozilla.javascript.gen.exec_1.exec(exec)
位于org.mozilla.javascript.Context.evaluateString(Context.java:1079)
位于rhinon8.main(rhinon8.java:12)
我尝试使用Rhino1.7R4和Rhino1.7R5pre,结果相同
有人知道一种解决方法(不改变JS源)使用JS.jar,而不是JVM1.4所需的JS-14.jar。它不应该在JDK8中使用Nashorn吗?使用Rhino有什么理由吗?这是针对一个应该在多个java版本上运行的Web应用程序的。我刚刚在Windows 7上使用64位JDK 1.8.031进行了尝试,结果成功了。我在一个使用32位JVM的Linux 64位应用程序上。我将在其他操作系统上试用,看看Windows 8.1 64和1.8.0_31 32位JVM上的相同错误。