问题标签 [nashorn]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
3901 浏览

java - Java 中是否有 Nashorn 的 ScriptObjectMirror 的公共和具体实例?

我基本上想去:

然后像这样调用一些JS,myObj参数在哪里:

我现在正在这样做,但 Nashorn 抱怨说:

TypeError:无法将“with”应用于非脚本对象

所以我传入的Java对象需要是ScriptObjectMirror的一个实例。

0 投票
2 回答
5883 浏览

java - 在 Java 中获取 Nashorn JsonObject

在我的 JavaScript 中,我有一个 JSON 对象,我将其用作 Java 对象的参数。在 Java 方面,我收到一个jdk.nashorn.internal.scripts.JO4但只有jdk.nashorn.internal.scripts.JO类退出。如何访问此 JSON 对象?

0 投票
2 回答
348 浏览

javascript - break 和 continue 语句导致 Nashorn 中的 finally 块执行

我很困惑为什么在/finally之后被执行(版本:Java 8 update 5)breakcontinue

执行: .../tmp>jjs test.js

输出break

输出continue代替break

我尝试在浏览器中执行相同的代码(替换print()console.log()

输出与 Firebug 中的预期一致

0 投票
2 回答
1180 浏览

java - Java8 Javascript Nashorn 异常:nashorn 当前没有全局实例

我想检索在 JS 中生成的对象,将它们存储在 Java 中,然后在它们上调用方法。这适用于 Java 7,现在使用 Java 8 我得到一个异常:

我已经从这里http://docs.oracle.com/javase/8/docs/technotes/guides/scripting/prog_guide/api.html修改了官方示例。

现在我创建了一个最小的例子来产生这个异常。看起来,如果一个 JS 对象通过返回值传递给 Java,这与 JS 调用 Java 对象的方法并传递该对象的情况不同。

程序输出:

obj 是预期的 ScriptObjectMirror,o1 是内部对象。 http://cr.openjdk.java.net/~sundar/8023631/webrev.00/src/jdk/nashorn/api/scripting/NashornScriptEngine.java.html第 481 行显示了如何抛出此异常。所以我认为,当作为参数传递给 Java 时,将“裸”JS 对象包装到 ScriptObjectMirror 中存在问题。

现在我有 2 个问题: 1. 这是我的代码中的错误吗?还是 Java8 nashorn 中的错误?2.有没有办法可以解决这个异常错误,保持相同的调用方案。

谢谢弗兰克

0 投票
4 回答
5743 浏览

java - 中断运行 nashorn 脚本的 java 线程

在下面的代码中,我有 javascript 在与主线程不同的线程中运行。该脚本是一个无限循环,因此需要以某种方式终止。如何?

脚本开始运行后调用 .cancel() 不起作用。但是如果我在线程初始化之后调用 .cancel() ,它将终止它(注释掉的行)。

0 投票
0 回答
632 浏览

java - 如何使用 Nashorn 在 JavaScript 中实例化 Java 类?

Java 代码

JavaScript 代码

这几乎就是我想要做的。我正在创建的应用程序需要将 Java 部分传输Double到 JavaScript 以在嵌入式浏览器中使用。我查看了 Nashorn 和几个教程,但是虽然他们的代码很好,但我的代码在aJavaClass声明时无法正确运行。没有这条线,一切正常。

到目前为止,我唯一能想到的就是存在导入问题,但我不确定如何测试它。

JS 不认识我的班级有什么原因吗?

0 投票
1 回答
691 浏览

console - 评估空对象-> nashorn 控制台崩溃(“无法获取默认字符串值”)

我是 JavaScript 新手。在 nashorn 1.8.0_11 中,我看到了以下行为。注意print(x)工作正常,但评估x会导致崩溃。我可以认为这是一个错误吗?如果是这样,这是一个已知的错误吗?

0 投票
1 回答
1079 浏览

java - 如何销毁 Java ScriptEngine 实例?

我正在使用 Java 8。我不是 Java 专家(自 10 年前大学以来就没有看过 Java)

我创建了一个 ScriptEngine 的实例(如果重要的话是 Nashorn)。我用它来评估几个 javascript 文件。

该脚本在它自己的小 javascript 世界中非常愉快地运行。我喜欢它。

我还有一个 File System WatchService 正在运行,以防我的一些 java 脚本被修改。当它们被修改时,我创建一个新的 ScriptEngine,并使用新的 ScriptEngine 对象评估新版本的 javascript 文件。

我的问题是,一旦我创建了新的脚本引擎,我就无法“杀死”旧的脚本引擎。旧脚本无限期地继续运行。

我真的很想释放旧 scriptEngine 对象正在使用的资源。而且我希望它停止做它正在做的事情(因为如果他们都尝试做同样的事情,它可能与新实例发生冲突)。

那么......我如何完全消除旧的 ScriptEngine,包括其中产生的任何线程?

0 投票
4 回答
6954 浏览

java - getEngineByName("nashorn") 返回 null

无法获得 Nashorn 引擎

engine返回null

我正在使用eclipse,jdk1.8.0_11

java -version

java版本“1.8.0_20-ea”

Java(TM) SE 运行时环境 (build 1.8.0_20-ea-b23)

0 投票
1 回答
1746 浏览

java - Nashorn,Java 集合,如何在纯 JavaScript 中实现 equals 和 hashCode

我遇到了以下问题。我想在Nashornjava.util.HashMap脚本中使用and ,我需要使用特定的自定义对象作为HashMap 中的键,并且还用于检查 Map 中是否有键(另一种选择是检查对象是否在Collection.contains(对象 o))。java.util.PriorityQueueHashMap.containsKey()

所以,很明显,我需要根据一些字段值在我的对象中实现 equals 和 hashCode。

例如:

  1. 尝试使用 JavaScript。由于 JavaScript 没有这些方法,因此不起作用。请参阅样本 1样本 2

  2. 扩展 java.lang.Object。样品 3。部分工作,正在调用方法。但

    • 如何使用参数插入构造函数?
    • 如何从 this:[object Object] 转换为 other:jdk.nashorn.javaadapters.java.lang.Object@0,反之亦然?
  3. 用 Java 实现我的自定义类并用 JavaScript 扩展它。样品 4。作品。但是如果我必须使用 Java,我需要 Nashorn 吗?

编辑 1

@Tomasz,谢谢。已经看到所有提到的链接。但是,尽管存在一些未记录的情况。几乎放弃了Nashorn。来到以下部分解决方案,正在调用方法,正在使用构造函数,但是如何other.fromequals方法中进行强制转换以访问from原始对象的字段(此代码为 Vertex 的每个实例生成不同的类):

编辑 2

感谢 Tomasz,正如他所指出的,每次使用特定于类的实现对象调用 Java.extend() 函数都会生成一个新的 Java 适配器类。因此,我们需要有一个 Object Extender 并使用该类型实例化对象,正如他在示例中所展示的那样。我对其进行了一些修改,因此它使用工厂或直接构造函数生成具有相同类的实例,因为我们使用的是相同的 Object Extender

但是,还有一个问题,就是参数的类型,equals也就是说jdk.nashorn.javaadapters.java.lang.Objecttheotherthisinsideequals是不同的类型。有没有办法从传递给的对象中转换或获取_fromequals值?

解决方案

在 Tomasz 的回答中查看问题的解决方案

伟大的工作托马斯!谢谢。

PS:很遗憾在 Nashornequals中没有简洁直接的实现方式。hashCode这对原型设计很有用。只需将其与此进行比较:)