我想从我的 Java 应用程序启动外部第三方应用程序。这个外部应用程序应该在我的 java 应用程序运行时一直运行。
stdin
有时(这取决于用户交互)我的 java 应用程序应该能够通过和读写这个外部应用程序stdout
。
我怎样才能做到这一点?
我想从我的 Java 应用程序启动外部第三方应用程序。这个外部应用程序应该在我的 java 应用程序运行时一直运行。
stdin
有时(这取决于用户交互)我的 java 应用程序应该能够通过和读写这个外部应用程序stdout
。
我怎样才能做到这一点?
本质上,您将需要 Java 中的多个线程来监视外部进程的结束,并围绕其输入/输出/错误流进行洗牌,以便您的主要 Java 应用程序可以访问它。
有更多的“基本”方法可以使用类似的类来实现Process
,但我建议使用Apache Commons-exec,它提供了一些有用的工具来处理返回值和 I/O。
在您实施启动 a 的建议时Process
,请阅读并实施When Runtime.exec() won't的所有建议。
还可以考虑使用 aProcessBuilder
代替Runtime.exec()
(如果编码为 1.5+)。
是前应用程序本机代码,还是其他 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 方还是您可以控制的东西?...它是用什么构建的,它的功能是什么,等等。
'kludgy' 方法是简单地使用文件系统并让 Java 监视放置在特定位置的文件(注意适当地处理锁定的文件)。更复杂的方法是通过套接字进行通信,或者写入本地/内部托管数据库(如 hsqldb)中的数据库表。通过 java.lang.Process 使用输入/输出流也可以解决问题,当然这取决于第 3 方应用程序。
但同样,所有这一切都取决于您正在与之通信的应用程序的细节。如果第 3 方应用程序是 Excel,Java 的 Process 类将无济于事(在这种情况下,您可能必须按照我提到的第一种方法查看 xls 文件的保存目录)。