簡體   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