1

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

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

我怎样才能做到这一点?

4

4 回答 4

2

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

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

于 2011-06-13T20:31:14.327 回答
1

在您实施启动 a 的建议时Process,请阅读并实施When Runtime.exec() won't的所有建议。

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

于 2011-06-13T20:32:05.730 回答
0

是前应用程序本机代码,还是其他 Java 程序?如果是本机代码,请查看http://download.oracle.com/javase/1.5.0/docs/api/java/lang/Process.htmlhttp://download.oracle.com/javase/1.5.0 /docs/api/java/lang/Runtime.html

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

于 2011-06-13T20:09:58.237 回答
0

这取决于外部应用程序的具体情况,主要是:第 3 方还是您可以控制的东西?...它是用什么构建的,它的功能是什么,等等。

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

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

于 2011-06-13T21:12:40.653 回答