我想连接两个程序,但遇到了麻烦,对所有内容进行了Google搜索(可能是我做错了),所以现在我来找您。
因此结构如下所示,第一个(让我称它为 ProgramA )和第二个(让我称其为 ProgramB )是具有不同任务的不同软件。

问题的核心是,我不完全知道如何通过命令行将消息发送到ProgramB。
实际上,我可以这样通过 ProgramA 执行 ProgramB :

Runtime.getRuntime().exec("... ProgramB ...");

忘了提及 ProgramB 也具有System.in阅读器。
如何连续从ProgramA开始通过ProgramA向ProgramB发送消息,并通过命令行侦听更多消息?

例如:程序A->程序B(等待传入消息)
现在该怎么做才能将某些东西发送到一个单独运行并且像命令行一样工作的程序?

最佳答案

有许多方法可以执行进程间通信。一种适合您情况的简单方法是,在需要发送消息时,让ProgramA写入标准输出(例如System.out.println("some message");)。然后,让ProgramB执行一个循环,该循环从以下标准读取:

while(true) {
    BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
    String input = reader.readLine();
    // do something with the input
}

只要确保您有一些输入可以导致循环结束,以便ProgramA可以在需要时使ProgramB很好地关闭。

要使用标准输入/输出,您可以从命令行启动两个进程,并将其中一个的输出通过管道传递给另一个,如下所示:
java com.example.ProgramAMainClass | java com.example.ProgramBMainClass

但是,由于看起来您是从ProgramA内部启动ProgramB,因此可以获取已启动进程的输出流并对其进行写入(而不是标准输出)。请注意,它被称为输出流,因为从ProgramB的角度来看,尽管ProgramA将向其输出,但它是输入流。
Process programBProc = Runtime.getRuntime().exec("... ProgramB ...");
Writer writer = new OutputStreamWriter(programBPrice.getOutputStream ());
// and wherever you need to write a message from programA, do this:
writer.write("some message\n"); // make sure you include the newline

在这种情况下,从ProgramB读取这些消息的过程与使用standard in完全相同。

请注意,您可以根据需要让ProgramA从ProgramB读取响应。您可以通过在ProgramA中获取进程的输入流,然后从中读取来完成此操作。 ProgramB可以使用System.out.println("some response");发送响应

关于java - 向正在运行的进程发送消息,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31081973/

10-11 02:38