Java外部程序

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

有时候(这取决于用户交互)我的java应用程序应该能够通过stdinstdout读写这个外部应用程序。

我怎样才能做到这一点?

是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

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

从本质上讲,您将需要Java中的多个线程来监视外部进程的结束,并在其输入/输出/错误流周围进行混乱,以便您的主Java应用程序可以访问它。

使用Process这样的类有更多的“基本”方法,但我建议使用Apache Commons-exec ,它提供了一些处理返回值和I / O的有用工具。

在实现启动Process的建议时,请阅读并实现Runtime.exec()不会的 所有建议。

还可以考虑使用ProcessBuilder代替Runtime.exec() (如果编码为1.5+)。

这取决于外部应用程序的细节, 主要是:第三方还是你可以控制的东西? ……它的构建内容,function是什么,等等。

一个’kludgy’方法就是简单地使用文件系统并让Java监视丢弃在特定位置的文件(注意适当地处理锁定的文件)。 更复杂的方法是通过套接字进行通信,或者写入本地/内部托管的数据库(如hsqldb)中的数据库表。 通过java.lang.Process使用输入/输出流也可能会有所帮助,具体取决于第三方应用程序。

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