Java外部程序

Java外部程序,java,communication,external-process,Java,Communication,External Process,我想从Java应用程序启动外部第三方应用程序。当我的java应用程序运行时,这个外部应用程序应该一直运行 有时(取决于用户交互),我的java应用程序应该能够通过stdin和stdout读取和写入此外部应用程序 我该怎么做呢?是ex-app本机代码还是其他Java程序?如果是本机代码,请查看和 这将允许您执行本机程序,跟踪其状态,获取其输出并向其发送输入。本质上,您需要多个Java线程来监视外部进程的结束,并在其输入/输出/错误流中来回移动,以便主Java应用程序能够访问它 有更多的“基本”方法

我想从Java应用程序启动外部第三方应用程序。当我的java应用程序运行时,这个外部应用程序应该一直运行

有时(取决于用户交互),我的java应用程序应该能够通过
stdin
stdout
读取和写入此外部应用程序


我该怎么做呢?

是ex-app本机代码还是其他Java程序?如果是本机代码,请查看和


这将允许您执行本机程序,跟踪其状态,获取其输出并向其发送输入。

本质上,您需要多个Java线程来监视外部进程的结束,并在其输入/输出/错误流中来回移动,以便主Java应用程序能够访问它


有更多的“基本”方法来处理类,如
进程
,但我建议使用,它提供了一些有用的工具来处理返回值和I/O。

当您执行启动
进程
的建议时,请阅读并执行的所有建议


也考虑使用A代替代码>运行时。执行()/代码>(如果编码为1.5 +)。

< P>这取决于外部应用程序的细节,<强>主要是:第三方,或者是你控制的东西?< /强>…它是用什么构建的,它的功能是什么,等等

“kludgy”方法是简单地使用文件系统,让Java监视将文件放到特定位置(注意适当地处理锁定的文件)。更复杂的方法是通过套接字进行通信,或者在本地/内部托管的数据库(如hsqldb)中写入数据库表。当然,通过java.lang.Process使用输入/输出流也可以做到这一点,这取决于第三方应用程序


但所有这些都取决于与之通信的应用程序的具体情况。如果第三方应用程序是Excel(在这种情况下,您可能必须按照我提到的第一种方法查看xls文件的保存目录),Java的Process类将不会有任何帮助。

好的,我与Process和ProcessBuilder非常相似。但是,当ex-app(本机应用程序)发送输出时,如何立即获取输出?我迫不及待地想结束ex-app流程。@MiniKarol:这篇文章解决了这个问题;请参阅
class StreamGoBler extends Thread
。它是一个第三方应用程序,我可以通过stdin和stdout与之通信。协议描述得很好。只有一个问题——我的java技能;)。好消息是,无论如何,你不需要上面描述的混乱或复杂的解决方案。