javascript - 如何在 Netbeans 的 Nashorn (JDK 8+) 中调试 JavaScript?

标签 javascript netbeans

我看到了最新的 Netbeans 8.0 beta提供了一种调试“在 Nashorn 中执行的 JavaScript 代码”的方法(参见附件)

enter image description here

查看此操作的步骤是什么?

[更新]只能通过打开文件(在任何项目之外)运行一个简单的 JavaScript 文件,在文件内部单击,右键单击,然后选择“运行文件”选项。

enter image description here

我需要指出快捷方式“Shift-F6”对我不起作用。

因此,如果其他人知道运行它的不同方式,请发布您的解决方案。

[更新 2] 关于 JavaScript Nashorn 的新文章提及 Netbeans 中的 JavaScript 调试

[更新 3] 似乎 Nashhorn 将在 JDK 内部被弃用。参见 JEP 335: Deprecate the Nashorn JavaScript Engine

最佳答案

您需要在 JDK8 上运行 IDE,或者通过工具|Java 平台将 JDK8 添加为平台。创建一个新的Java 项目。创建后,确保它使用 JDK8 平台:

  1. 在“项目”窗口中右键单击项目
  2. 选择属性->库并检查 JDK 平台设置

接下来你可以:

  • 在这个 Java 项目中创建一个 JavaScript 文件,例如,如果您右键单击该文件,您可以运行它或调试它。在这种情况下,它实际上会使用 Nashorn 运行/调试单个 JS 文件
  • 或者您可以从 Java 代码开始 JavaScript 代码,例如:

        try {
        ScriptEngineManager factory = new ScriptEngineManager();
        ScriptEngine engine = factory.getEngineByName("nashorn");
        engine.eval("function hi(){\nvar a = 'PROSPER'.toLowerCase(); \nmiddle(); \nprint('Live long and' + a)}\n function middle(){\n var b = 1; for(var i=0, max = 5; i<max;i++){\nb++;\n}\n print('b is '+b);}hi();");
    } catch (ScriptException ex) {
        Logger.getLogger(SampleRunner.class.getName()).log(Level.SEVERE, null, ex);
    }
    
  • 或者您可以使用 Java 代码加载 JS 文件:

        try {
        ScriptEngineManager factory = new ScriptEngineManager();
        ScriptEngine engine = factory.getEngineByName("nashorn");
        engine.eval("load(\"" + "src/packageName/file.js" + "\");");
    } catch (Exception ex) {
        Logger.getLogger(SampleRunner.class.getName()).log(Level.SEVERE, null, ex);
    }
    

使用它,如果您运行/调试 Java 项目,您可以像往常一样向 JavaScript 代码和 Java 代码添加断点/监视,并且当 JS 代码被执行时,调试器将在适当的行暂停,无论如果它们属于 JS 或 Java。

因此,如果您有 file.js JavaScript 文件,您可以在 IDE 中打开它,添加行断点,当使用上面的第二个代码片段加载文件时,调试器将在行断点处停止.

更新:示例项目可用here .检查一下,它包含所有已知的(对我而言)在 Nashorn 中调试和运行 JS 的方法。

关于javascript - 如何在 Netbeans 的 Nashorn (JDK 8+) 中调试 JavaScript?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22017086/

相关文章:

java - 有条件的停止计时器仅在第一次有效?

java - 无法在命令行上将 Netbeans 生成的 .java 文件编译为 .class

java 从导入的子类访问父方法

javascript - 解析长数

javascript - 如何创建凹形边框?

javascript - 如何在 mvc 4 中创建弹出窗口?

netbeans - 如何使用 xdebug 使 NetBeans 不停止在第一行?

jakarta-ee - 如何找到 netbeans RSVP 教程文件

javascript - 将事件对象从指令传递到回调

javascript - 在angularjs中为这个HTTP GET添加HTTP基本认证