【问题标题】:Calling a node.js script from inside java从 java 内部调用 node.js 脚本
【发布时间】:2012-12-25 21:02:31
【问题描述】:

如何在 java 中调用 node.js 并将 console.log 值保存在 String 变量中?

【问题讨论】:

    标签: java node.js console


    【解决方案1】:

    查看https://github.com/caoccao/Javet,您可以在 java 中嵌入 node.js 运行时 应用程序并在两者之间共享变量。

    【讨论】:

      【解决方案2】:

      是的,使用 java 执行和 node.js 文件非常容易。

      import java.io.FileReader;
      import javax.script.ScriptEngine;
      import javax.script.ScriptEngineManager;
      
      public class RunScriptFileDemo {
        public static void main(String[] args) {
            ScriptEngineManager manager = new ScriptEngineManager();
            ScriptEngine engine = manager.getEngineByName("js");
            try {
               FileReader reader = new FileReader("yourFile.js");
               engine.eval(reader);
               reader.close();
            } catch (Exception e) {
               e.printStackTrace();
            }
         }
      }
      

      【讨论】:

      • 这不会运行 Node.js 程序。它只会运行普通的 javascript 程序。正如其他评论者所说,需要添加 Avatar.js、nodyn 或 trireme 才能使 Node.js 的任何功能发挥作用。
      【解决方案3】:

      检查这些允许您在 jvm 中运行 node.js 脚本的项目

      【讨论】:

      • nodyn 不再被积极维护。 (来自 nodyn github 网站)。
      • ...像 avatar-js
      【解决方案4】:

      Java 应用程序可以与正在运行的 Node.JS 应用程序进行通信。例如,您可以让 Node.JS 应用程序在可用端口上运行,而 Java 应用程序可以通过 tcp 套接字与其通信。

      http://nodejs.org/api/net.html

      或者您可以创建一个 http 服务器并公开一个您的 Java 应用可以使用的 rest 服务。

      http://nodejs.org/api/http.html

      或者如 md_5 所说,您可以使用 Runtime.exec,然后在生成的进程上调用 getInputStream。

      http://docs.oracle.com/javase/7/docs/api/java/lang/Runtime.html

      node.js 和 Java 之间的通信方式与其他可以完成的跨应用程序通信没有什么不同。

      还可以使用 node-java 之类的东西从 Node.JS 应用程序调用 Java 代码。

      https://github.com/nearinfinity/node-java

      【讨论】:

      • 我尝试使用 Runtime.getRuntime().exec(...) 调用 jshint,但我不断收到异常:java.io.IOException: Cannot run program "jshint" CreateProcess error=2,该系统找不到指定的文件;从常规命令行它工作得很好,虽然......我不知道问题出在哪里:(
      • 您刚刚提到连接到正在运行的 node.js 应用程序,但事实并非如此。正如@Somatik 所提到的,有一些在 jvm 中运行 node.js 应用程序的解决方案。
      • 这个答案完全不相关,我想知道为什么它有赞成票!!
      【解决方案5】:

      做不到。对于普通的 JS,您可以使用 Rhino,但对于 Node,您需要确保它在 PATH 中,然后调用 Runtine.exec 或带有 ByteArrayOutputsreams 的 ProcessBuilder,稍后可以将其转换为字符串。节点代码无法访问 Java,反之亦然。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-24
        • 2017-10-21
        • 2012-02-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多