繁体   English   中英

Java 外部程序

[英]Java external program

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

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

我怎样才能做到这一点?

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

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

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

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

是前应用程序本机代码,还是另一个 Java 程序? If it's native code, look at http://download.oracle.com/javase/1.5.0/docs/api/java/lang/Process.html and http://download.oracle.com/javase/1.5.0 /docs/api/java/lang/Runtime.html

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM