我正在尝试使用新的Java 8 Nashorn javascript引擎运行javascript脚本,但失败,出现以下错误:
<eval>:1 ReferenceError: "readFully" is not defined
脚本使用应在全局作用域中定义的readfull函数,nashorn在启用脚本模式的情况下运行(如图所示,在通过脚本引擎运行时,默认为启用脚本模式)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
当使用nashorn命令行运行示例脚本时(使用jdk的jjs工具),使用-cript参数,一切正常。以下是相同脚本的结果:
Hey!
function print() { [native code] }
function readFully() { [native code] }
我可以重写readFully方法并将其与脚本上下文绑定,但我更喜欢理解为什么它不起作用并使用已经内置的函数。
问候
https://wiki.openjdk.java.net/display/Nashorn/Nashorn扩展
准备就绪(仅限脚本模式)
该函数读取作为字符串参数传入的文件的全部内容,并将其发送到stdout,或者您可以将结果分配给变量。
readFully示例:
jjs
Readfull不是标准的JavaScript函数,在Nashorn中也可能不是标准函数。
当Rhino被选择包含在Java6的Sun实现中时,也存在类似的问题。脚本工具可以提供嵌入式API中不存在的增强功能。readFully不是Java8 Nashorn API中的文档功能。
在以前的Java版本中,规范声明所提供的脚本引擎是JRE供应商的一个实现细节。我不知道Java8是否强制提供发动机,或者是否保证未来的兼容性。如果这可能是一个问题,我会彻底检查JSR-337。
最后,我实现了一个在脚本中使用的现成函数(仅与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;
}
引擎配置 支持的数据库 数据库URL 《PostgreSQL》 MySQL 甲骨文公司 Microsoft SQL服务器 SQLite 其他 引擎创建API 池化 自定义DBAPI connect()参数/on connect例程 传递给的特殊关键字参数数据库接口() 控制如何将参数传递给DBAPI connect()函数 在连接后修改DBAPI连接,或在连接后运行命令 完全替换DBAPI con
本节详细介绍了 Engine , Connection 以及相关对象。重要的是要注意,当使用sqlAlchemy ORM时,通常不会访问这些对象;相反,这些对象 Session 对象用作数据库的接口。但是,对于围绕直接使用文本SQL语句和/或SQL表达式构造而构建的应用程序,而不需要ORM的更高级别管理服务的参与,则 Engine 和 Connection 是国王(还是王后?)-继续阅读。 基本用
我正在使用node.js和引擎设置超文本传输协议服务器。然而,我不断遇到的问题,我有很少的信息如何解决,我将不胜感激一些帮助解决这个问题。 下面是我启动这个引擎的设置。
您好,我正在尝试使用passportjs和jsonwebtoken进行android应用程序的身份验证,但当我尝试生成一个令牌作为用户登录并使用postman it响应错误测试api时: 未指定默认引擎,也未提供扩展。在函数的新视图中(C:\newApp\awesomeProject\node\u modules\express\lib\View.js:61:11)。在ServerResponse
问题内容: 我正在尝试在操作系统上设置libusb API。我在libusb.org上下载了libusb api。我遵循了标准的安装过程: 然后,我启动了Eclipse C / C ++,并从Internet上的教程中复制了一些代码。但是当尝试构建它时,我得到以下输出: 我在/ lib中有libusb.so,在/ usr / local / include中也有usb.h,在/ usr / loc
我试图以编程方式创建一个饼图,希望把它变成一个React组件来重用。基本上,我需要一个饼图,是可点击的,每个切片扩展成一个整体饼当点击。我试图按照这个教程来制作饼图,在底部,我有一个JS的一部分,我试图测试出来。我最终得到了以下是错误消息的截图。 我的理解是,这不是jQuery,只是一个普通的JS。我不确定这是不是真的。我通过CDN导入jQuery,但仍然得到相同的错误。我读了这篇文章,我认为只是