从Java中调用一个node.js脚本

20

我该如何在Java中调用Node.js,并将console.log的值保存到一个String变量中?

5个回答

13

6
nodyn已不再得到积极维护。(来自nodyn的Github网站) - esthrim
像avatar-js一样。 - Clijsters

11

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

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

或者您可以创建一个 http 服务器,并公开一个 REST 服务,供 Java 应用程序使用。

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

或者如 md_5 所说,您可以使用 Runtime.exec,然后调用 resulting process 上的 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


1
我尝试使用Runtime.getRuntime().exec(...)调用jshint,但是我一直收到异常:java.io.IOException: Cannot run program "jshint" CreateProcess error=2, The system cannot find the file specified; 但是从常规命令行中运行它就可以正常工作... 我不知道问题出在哪里 :( - Predrag Stojadinović
1
你刚才提到连接正在运行的Node.js应用程序,但事实并非如此。正如@Somatik所提到的那样,有解决方案可以在JVM中运行Node.js应用程序。 - Mostafa Rezaei
1
这个回答完全无关,我想知道为什么它有赞成票!! - Willa

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();
      }
   }
}

9
这个程序不能运行Node.js程序,只能运行纯JavaScript程序。正如其他评论者所说,如果想使用Node.js的功能,需要添加Avatar.js、nodyn或trireme等模块。 - AllenKll

1

-1

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接