readFully没有使用Java Nashorn Javascript Engine定义
发布时间:2020-12-15 00:59:10 所属栏目:Java 来源:网络整理
导读:我正在尝试使用新的 Java 8 Nashorn javascript引擎运行javascript脚本,但它失败并出现以下错误: eval:1 ReferenceError: "readFully" is not defined 该脚本使用readFully函数,该函数应在全局范围内定义nashorn在启用脚本模式的情况下运行(在通过ScriptEng
我正在尝试使用新的
Java 8 Nashorn javascript引擎运行javascript脚本,但它失败并出现以下错误:
<eval>:1 ReferenceError: "readFully" is not defined 该脚本使用readFully函数,该函数应在全局范围内定义nashorn在启用脚本模式的情况下运行(在通过ScriptEngine运行时默认为http://mail.openjdk.java.net/pipermail/nashorn-dev/2013-December/002562.html). 以下是重现错误的示例: import java.io.FileNotFoundException; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException; public class Test { public static void main(String[] argv) throws FileNotFoundException,ScriptException { ScriptEngine scriptEngine = new ScriptEngineManager().getEngineByName("nashorn"); scriptEngine.eval("print('Hey!');print(print);print(readFully);"); } } 这个样本打印嘿!然后是print函数的源代码(另一个nashorn内置函数),最后它应该打印readFully方法的源代码.但我有这个例外: Exception in thread "main" javax.script.ScriptException: ReferenceError: "readFully" is not defined in <eval> at line number 1 at jdk.nashorn.api.scripting.NashornScriptEngine.throwAsScriptException(NashornScriptEngine.java:586) at jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:570) at jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:525) at jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:521) at jdk.nashorn.api.scripting.NashornScriptEngine.eval(NashornScriptEngine.java:192) at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:264) at com.github.bringking.maven.requirejs.Test.main(Test.java:14) Caused by: <eval>:1 ReferenceError: "readFully" is not defined at jdk.nashorn.internal.runtime.ECMAErrors.error(ECMAErrors.java:58) at jdk.nashorn.internal.runtime.ECMAErrors.referenceError(ECMAErrors.java:320) at jdk.nashorn.internal.runtime.ECMAErrors.referenceError(ECMAErrors.java:292) at jdk.nashorn.api.scripting.NashornScriptEngine.__noSuchProperty__(NashornScriptEngine.java:272) at jdk.nashorn.internal.scripts.Script$engine.L:35(nashorn:engine/resources/engine.js:37) at jdk.nashorn.internal.scripts.Script$^eval_.runScript(<eval>:1) at jdk.nashorn.internal.runtime.ScriptFunctionData.invoke(ScriptFunctionData.java:535) at jdk.nashorn.internal.runtime.ScriptFunction.invoke(ScriptFunction.java:209) at jdk.nashorn.internal.runtime.ScriptRuntime.apply(ScriptRuntime.java:378) at jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:568) ... 5 more 当使用带有-scripting参数的nashorn命令行(使用jdk的jjs工具)运行示例脚本时,一切都很好.以下是相同脚本的结果: Hey! function print() { [native code] } function readFully() { [native code] } 我可以重写一个readFully方法并将其与脚本上下文绑定,但我更喜欢理解为什么它不起作用并使用已经内置的函数. 问候 解决方法
最后,我实现了一个我在脚本中使用的readFully函数(仅与Nashorn兼容):
function readFully(url) { var result = ""; var imports = new JavaImporter(java.net,java.lang,java.io); with (imports) { var urlObj = null; try { urlObj = new URL(url); } catch (e) { // If the URL cannot be built,assume it is a file path. urlObj = new URL(new File(url).toURI().toURL()); } var reader = new BufferedReader(new InputStreamReader(urlObj.openStream())); var line = reader.readLine(); while (line != null) { result += line + "n"; line = reader.readLine(); } reader.close(); } return result; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- java – 如果启动新的任务实例,如何取消任务?
- java – 如何将扫描仪输入放入数组…例如几个数字
- java – com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityC
- Java判断中英文符号、标点的实现
- java – com.sun.awt包用法
- 浅谈java 面对对象(抽象 继承 接口 多态)
- java – 有谁有一个有用的助记符来实现比较器?
- Xcode8下iOS10常见报错闪退,字体适配和编译不过的问题及解
- java – 在JMeter中的BeanShell Sampler中将字符串解析为整
- java – 单击项目导致IllegalStateException