gpt4 book ai didi

java - 如何从传递给 JavaScript 的字符串变量访问 Java 字符串方法?

转载 作者:太空宇宙 更新时间:2023-11-04 08:55:33 24 4
gpt4 key购买 nike

我正在使用 Java 脚本引擎(Java 1.6 中)来动态计算 Java 程序中的某些表达式。我可以将 Java 对象从 Java 传递到 JavaScript,并调用它们的方法,但是当我传递 String 对象时,这会停止正常工作。

例如,在我的 Java 中,我可以使用 doSomething 方法定义一个类 JavaClass。然后,当我将 JavaClass 对象传递给 JavaSCript 时,我可以调用 doSomething 方法。

但是,如果我在 Java 中创建一个 String 对象,并将其传递给 JavaScript,则当我尝试在 JavaScript 中调用它的endsWith 方法时,会收到错误消息。

我的代码如下:-

ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("JavaScript");
String myString = "apple hello";
JavaClass javaClass = new JavaClass();
engine.put("myString", myString);
engine.put("thing", javaClass);
engine.eval("thing.doSomething()");
engine.eval("myString.endsWith(\"hello\")");

doSomething 方法被正确调用,但找不到endsWith :-

__EXCEPTION__:javax.script.ScriptException:   sun.org.mozilla.javascript.internal.EcmaError: TypeError: Cannot find function endsWith. 

就好像我的 Java String 对象被转换为 JavaScript 字符串对象 - 例如,我可以使用 JavaScript String 的 length 属性。

我可以将我自己的endsWith函数添加到我的JavaClass类中,它只是调用StringendsWith,并且这可以正常工作 - 但不太好......:(

如果正在转换,我可以阻止这种情况发生吗?如果是别的事情,我做错了什么吗?有办法解决吗?

谢谢! :)

最佳答案

将最后一行更改为此。默认情况下,字符串会自动在 Java 和 JS 类型之间转换。因此,您必须在 JS 代码中强制将 myString 转换为 Java 字符串..

    engine.eval("new java.lang.String(myString).endsWith(\"hello\")");

关于java - 如何从传递给 JavaScript 的字符串变量访问 Java 字符串方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2371693/

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