我想连接两个程序而且我被卡住了,谷歌搜索了一切(可能是我做错了)所以现在我转向你。
所以结构如下,第一个(我称之为 ProgramA ),第二个(我称之为 ProgramB )是具有不同任务的不同软件。 / p>
问题的核心是,我并不完全知道如何通过命令行向ProgramB发送消息。
实际上,我当然可以通过 ProgramA 执行 ProgramB :
Runtime.getRuntime().exec("... ProgramB ...");
忘记提及 ProgramB 也有一个System.in读者 如何持续使用ProgramA向ProgramB发送消息,这些消息是从ProgramA启动的,并通过命令行监听更多消息?
例如: ProgramA - > ProgramB(等待收到的消息)
现在该做什么来发送一些单独运行的程序并且像命令行一样工作?
答案 0 :(得分:1)
有许多方法可以执行进程间通信。适合您的场景的一种简单方法是让ProgramA在需要发送消息时写入标准输出(例如while(true) {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String input = reader.readLine();
// do something with the input
}
)。然后,让ProgramB执行一个从标准读取的循环:
java com.example.ProgramAMainClass | java com.example.ProgramBMainClass
请确保您有一些输入可能导致循环结束,以便ProgramA可以在需要时使ProgramB很好地关闭。
要使用标准输入/输出,您可以从命令行启动这两个进程,并将一个输出通过管道传输到另一个进程,如下所示:
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
但是,由于看起来你正在从ProgramA中启动ProgramB,你可以获得启动的进程的输出流并写入它(而不是标准输出)。请注意,它被称为输出流,因为ProgramA将输出到它,即使从ProgramB的角度来看它也是一个输入流。
System.out.println("some response");
在这种情况下,从ProgramB读取这些消息与使用标准在上面完全相同。
请注意,如果需要,您可以让ProgramA从ProgramB读取响应。您可以通过在ProgramA中获取进程的输入流然后从中读取来完成此操作。 ProgramB可以使用{{1}}
发送回复