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

时间:2014-02-25 14:27:06

标签: javascript netbeans

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

enter image description here

有什么步骤可以看到这一点?

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

enter image description here

我需要提一下,“Shift-F6”的快捷方式对我没用。

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

[更新2] 关于JavaScript Nashorn的一篇新文章提到了Netbeans中的JavaScript调试

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

1 个答案:

答案 0 :(得分:9)

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

  1. 右键单击“项目”窗口中的项目
  2. 选择Properties-> Libraries并检查JDK Platform设置
  3. 接下来你可以:

    • 在此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的方法。