gpt4 book ai didi

java - sun.org.mozilla.javascript.internal.NativeJavaObject 无法转换为 java.lang.String

转载 作者:行者123 更新时间:2023-12-01 15:16:23 29 4
gpt4 key购买 nike

我正在使用 java 6 javax.script 功能,但有一个问题:

在调用 ScriptEngine.eval() 方法之前,我将一些属性放入 ScriptContext:

scriptContext.setAttribute("Utils", utils, ScriptContext.ENGINE_SCOPE);

在我调用的脚本中:

var s = utils.getMyString()

Java getMyString() 方法返回一个字符串 (java.lang.String)。

scriptContext 中“s”的类型是 sun.org.mozilla.javascript.internal.NativeJavaObject,它包装了 Java String 实例。

当我尝试使用以下方法从 Java 上下文中获取属性时:

(String) scriptContext.getAttribute("s");

我得到了

    java.lang.ClassCastException:
sun.org.mozilla.javascript.internal.NativeJavaObject cannot be cast to java.lang.String

当我在脚本中写入时:

var s = "hello world"

var s = "" + utils.getMyString()

var s = String(utils.getMyString())

一切都很好,因为这些是 javascript 字符串,可以通过内部转换从 scriptContext 获取。

我认为当 NativeJavaObjects 从 scriptContext 中释放时,它们应该被解开(参见 sun.org.mozilla.javascript.internal.Wrapper.unwrap())。

那么,这是一个错误吗?我对 java7u5 也有同样的问题。

我不相信我必须这样做:

var s = String(utils.getMyString())

将 Java 字符串转换为 JavaScript 字符串,以便能够将其作为 Java 字符串返回...

感谢您的观点。

最佳答案

问题似乎类似于:https://stackoverflow.com/questions/11814010/javascript-rhino-java-float-method-returns-number-or-objectRhino Javascript: How to convert Object to a Javascript primitive?

但就你而言,我相信:

Context.enter().getWrapFactory().setJavaPrimitiveWrap(false); 

将抛出 NullPointerException。您使用 JDK javax.script 中的 Rhino,ScriptEngine.eval 方法包装了处理上下文的所有操作(进入、退出上下文等),因此如果您在 eval 之前调用上述代码,rhino 上下文可能不会初始化(输入方法将上下文分配给当前线程)。

解决方案可能是直接使用 Rhino 形成 org.mozilla 并直接处理上下文:link并在进入上下文时调用上面的代码。

当我使用 JDK ScriptEngine 时,我遇到了类似的问题(还有其他问题),我使用 Rhino 形式的 mozilla 解决了它。

关于java - sun.org.mozilla.javascript.internal.NativeJavaObject 无法转换为 java.lang.String,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11542075/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com