我正在尝试编写 JavaScript 来定义一个扩展现有 Java 类的类,该类是从 JSR223 ScriptEngine
调用的。我知道JavaAdapter works for an Interface, but not a Class .
ScriptEngine js = new ScriptEngineManager().getEngineByExtension("js");
js.eval("new java.lang.Runnable {run: function() { ... } }"); // works
js.eval("new java.util.TimerTask {run: function() { ... } }"); // throws
我知道这就是文档所说的我应该期待的。我也知道,一旦我可以切换到 Nashorn,所有这些都会消失,我将可以轻松访问 Java.extend() 等,但目前我仍坚持使用JDK7。
鉴于这一切,有什么办法可以做到这一点吗?我认为我的后备方案将直接切换到 Mozilla 的 native Rhino 绑定(bind),但我更愿意使其尽可能抽象。
最佳答案
它会抛出什么?
jjs> var tt = new java.util.TimerTask {run: function() { print("hello"); }}
jjs> tt.run();
hello
null
我通常完全跳过 TimerTask
// Daemon flag seems to be ignored.
var timer = new java.util.Timer(false);
timer.schedule(function() print("Hello"), 1000);
// Give timer a chance to run before exit.
java.lang.Thread.sleep(5000);
关于java - 我可以在 Oracle 的 JDK7 JSR223 JavaScript 引擎中扩展 Java 类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22486016/