当前位置: 首页 > 面试题库 >

如何从NodeJs调用Java程序

薛兴德
2023-03-14
问题内容

我有一个通常从命令行启动的Java程序。从命令行启动后,Java程序将一直运行直到被按下Ctrl +
C退出或杀死另一个脚本中的命令为止。Java程序向控制台输出错误消息(如果有)。

现在,我想开发基于Express的NodeJs
Web应用程序。当用户单击链接(运行)时,单击处理程序将调用Ajax请求,这将导致后端NodeJs脚本运行该Java程序(如果尚未运行)。另一个链接(停止)将使Ajax请求停止该Java程序。

如何做到这一点?用示例代码回答将是最有用的。

还有一个要求:如果此NodeJs Web应用程序终止,则由它启动的Java程序将继续运行,即它不依赖于NodeJs Web应用程序。


问题答案:

您可以启动子进程,并在不需要时发送终止信号。

var spawn = require('child_process').spawn;
var child = spawn('java', ['params1', 'param2']);

要终止应用程序或模拟CTRL+ C,请发送信号:

// control + c is an interrupt signal
child.kill('SIGINT');

// or send from the main process
process.kill(child.pid, 'SIGINT');

如果要以分离的方式运行应用程序,则可能应该将PID写入某处。要运行分离的应用程序,请按以下方式运行它:

var fs = require('fs');
var out = fs.openSync('./out.log', 'a');
var err = fs.openSync('./out.log', 'a');

var child = spawn('java', [], {
  detached: true,
  stdio: [ 'ignore', out, err ]
});
child.unref();

这产生了一个子进程,其I / O流与父进程没有关联。



 类似资料:
  • 问题内容: 我需要从PowerShell调用Java程序(jar文件)。以下代码有效: 但是我需要在一个过程中运行该应用程序(使用)。 我正在尝试以下成功: 错误: 知道如何解决吗? 问题答案: 您将需要为Powershell使用以下格式: 或者您可以使用的其他选项是Start-job:

  • 问题内容: 我正在写一个Java库,实际上是一个Clojure库,但是对于这个问题,重要的是它在JVM上运行。该库需要执行一些JavaScript。我尝试过Nashorn,但遇到了一些局限性,可能难以克服。另外,我想尝试NodeJS。 我希望我的库是独立的,不依赖于独立运行NodeJS的系统,因此需要一种特殊的部署机制将Java和NodeJS工件放置在正确的位置,以便由两个不同的网络服务器接收。但

  • 问题内容: 从Mongodb客户端,我们可以使用db.Collection.stats()来获取集合状态,例如: +记录数(计数) +磁盘 大小(storageSize) +索引(indexSizes) +平均对象大小(avgObjSize) 现在,我想使用Mongodb Java驱动程序从Web后端监视这些数据,请让我知道如何获取它们? 我已经提到:http : //mongodb.github

  • 从Mongodb客户端,我们可以使用db.collection.stats()获取集合的状态,例如: +记录数(count) +磁盘上的大小(storageSize) +索引(indexsize) +平均对象大小(avgObjSize) 现在我想用Mongodb java驱动程序从web后端监控这些数据,请让我知道如何获取它们? 我提到了:http://mongodb.github.io/mong

  • 问题内容: 如何从Java调用GraphViz,以及如何使用Java调用GraphViz函数?为了访问用于构建点图的GraphViz库,必须包含哪些必需的jar文件?是否有用于生成点图的示例程序 问题答案: 检查此 API,它很简单,并且具有几种输出格式(即pdf gif ..etc)。 编辑2016年5月: 许多人评论说该API不再可用;这里是其源代码: 首先,您需要创建并复制以下文件,然后粘贴

  • 问题内容: 我有一个想从Java使用的Perl模块。是否可以使用Windows上的ActiveState Perl或Linux随附的通用Perl来调用此代码?我找到了对JPL的引用,但似乎不再维护了。 问题答案: Inline-Java是从Perl调用Java的常用库,因此本文提出了 org.perl.java 模块,该模块应允许按要求从Java调用Perl。 但是,由于不同的JVM的JNI实现的