我想从我的Java应用程序启动外部第三方应用程序。这个外部应用程序应该在我的java应用程序运行时一直运行。
我的Java应用程序应该能够通过stdin
和stdout
来读取和写入此外部应用程序。
我该怎么做?
答案 0 :(得分:2)
基本上,您需要Java中的多个线程,以监视外部进程的结束,并在其输入/输出/错误流周围进行混乱,以便您的主Java应用程序可以访问它。
使用Process
这样的类有更多“基本”方法,但我建议使用 Apache Commons-exec ,它提供了一些处理返回值的有用工具/ O。
答案 1 :(得分:1)
在您实施启动Process
的建议时,请阅读并实施所有 When Runtime.exec() won't的建议。
另请考虑使用ProcessBuilder
代替Runtime.exec()
(如果编码为1.5 +)。
答案 2 :(得分:0)
是ex-app本机代码还是其他Java程序?如果是原生代码,请查看http://download.oracle.com/javase/1.5.0/docs/api/java/lang/Process.html和http://download.oracle.com/javase/1.5.0/docs/api/java/lang/Runtime.html
这些将允许您执行本机程序,跟踪其状态,并获取其输出并发送输入。
答案 3 :(得分:0)
这取决于外部应用程序的细节,主要是:第三方还是你可以控制的东西? ......它的内容是什么,它的功能是什么等等。
'kludgy'方法是简单地使用文件系统并让Java监视丢弃在特定位置的文件(注意妥善处理锁定的文件)。更复杂的方法是通过套接字进行通信,或者写入本地/内部托管的数据库(如hsqldb)中的数据库表。通过java.lang.Process使用输入/输出流也可能会有所帮助,具体取决于第三方应用程序。
但所有再次取决于您正在与之通信的应用程序的细节。如果第三方应用程序是Excel,Java的Process类将没有帮助(在这种情况下,您可能必须按照我提到的第一种方法观察xls文件的保存目录。)