readFully没有使用Java Nashorn Javascript Engine定义
发布时间:2020-05-25 12:54:21 所属栏目:Java 来源:互联网
导读:我正在尝试使用新的 Java 8 Nashorn javascript引擎运行javascript脚本,但它失败并出现以下错误: eval:1 ReferenceError: readFully is not defined 该脚本使用readFully函数,该函数应在全局范围内定义nashorn在启用脚本模式的情况下运行(在通过ScriptEngine
|
我正在尝试使用新的 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;
} (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
