我有一个基于jrunscript
的系统(目前),因为它能够使用Java 8 Sun Rhino之前的实现以及Nashorn来运行脚本。
发生了很多事情,但是我目前面临的挑战归结为以下事实:无论脚本处于何种执行状态,该工具本身都会退出JVM(与Java main()
方法不同,例如)。
例如,这是一个名为thread.js
的脚本:
load("nashorn:mozilla_compat.js");
var thread = new JavaAdapter(
Packages.java.lang.Runnable,
{
run: function() {
for (var i=0; i<10; i++) {
Packages.java.lang.System.err.println("i = " + i);
Packages.java.lang.Thread.sleep(500);
}
}
}
);
new Packages.java.lang.Thread(thread).start();
Packages.java.lang.System.err.println("Started.");
使用jrunscript thread.js
输出:
Started.
i = 0
使用jjs thread.js
输出:
i = 0
Started.
i = 1
i = 2
i = 3
i = 4
i = 5
i = 6
i = 7
i = 8
i = 9
jjs
的输出是我所期望的。
是否有一种方法可以使jrunscript
的行为像jjs
一样?我已经考虑过在我的jrunscript
脚本的末尾使用忙等待循环的可能性(但没有实现),该循环一直循环到VM中只剩下一个非守护线程为止,所以我有一种方法。但是可怜的人。
有想法吗?