首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从传递给JavaScript的字符串变量访问Java String方法?

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

Stack Overflow用户
提问于 2010-03-03 21:40:41
回答 1查看 1.5K关注 0票数 1

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

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

但是,如果我在Java语言中创建一个String对象,并将其传递给JavaScript,则在JavaScript中尝试对其调用endsWith方法时会出现错误。

我的代码如下:

代码语言:javascript
复制
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 :-

代码语言:javascript
复制
__EXCEPTION__:javax.script.ScriptException:   sun.org.mozilla.javascript.internal.EcmaError: TypeError: Cannot find function endsWith. 

这就好像我的Java String对象被转换成了一个JavaScript String对象--例如,我可以使用JavaScript string的length属性。

我可以将我自己的endsWith函数添加到我的JavaClass类中,它简单地调用字符串endsWith,这可以正确地工作--但不是很好……:(

如果它正在被转换,我能阻止这种情况发生吗?如果是其他原因,我是不是做错了什么?有没有办法解决这个问题?

谢谢!:)

EN

回答 1

Stack Overflow用户

发布于 2010-03-03 22:11:04

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

代码语言:javascript
复制
    engine.eval("new java.lang.String(myString).endsWith(\"hello\")");
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2371693

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档