我正在使用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 String对象--例如,我可以使用JavaScript string的length属性。
我可以将我自己的endsWith函数添加到我的JavaClass类中,它简单地调用字符串endsWith,这可以正确地工作--但不是很好……:(
如果它正在被转换,我能阻止这种情况发生吗?如果是其他原因,我是不是做错了什么?有没有办法解决这个问题?
谢谢!:)
发布于 2010-03-03 22:11:04
将最后一行更改为以下内容。默认情况下,字符串会自动在Java和JS类型之间转换。因此,您必须在JS代码中将myString强制转换为Java string。
engine.eval("new java.lang.String(myString).endsWith(\"hello\")");https://stackoverflow.com/questions/2371693
复制相似问题