IntelliJ Nashorn调试和评估JO对象会产生错误

时间:2017-02-10 05:26:19

标签: debugging intellij-idea nashorn

当调试在Nashorn解释器中运行的一些JavaScript(在版本2016.3.4中运行)时,我可以看到一些变量作为JavaScript对象正确显示,可以在Evaluate Expression窗口中进行评估,而其他变量则显示作为JO对象。显示为JO对象的那些不能被评估,因为它给出了NativeReferenceError异常。

如何将JO对象视为JavaScript变量并对其进行评估?

IntelliJ window showing how some JavaScript objects cannot be evaluated

1 个答案:

答案 0 :(得分:0)

事实证明,这非常容易解决。只需要捕获Java类中的JavaScript变量,以便可以在Evaluate Expression窗口中引用它们。像这样的班级可以完成这项工作:

package foo;

import jdk.nashorn.api.scripting.ScriptObjectMirror;

public class NashornCapture {
    private static Object[] args;
    private static ScriptObjectMirror arg;

    public static void capture(Object... vars) {
        args = vars;
    }

    public static void capture(ScriptObjectMirror vars) {
        arg = vars;
    }

    public static Object arg(int index) {
        return args[index];
    }

    public static Object arg(String name) {
        return arg.get(name);
    }
}

然后您可以按索引或名称引用变量,如下图所示。

IntelliJ window showing how you can evaluate variables using a helper class