我有一個Java程序,我想從我的Win32應用程序發送一個命令。通常我會使用WM_COPYDATA
,但是我對Java有什麼選擇?如何將命令發送到正在運行的Java程序?
3
A
回答
10
Java和Windows之間有一些互操作的方法。在功率和難度排序:
- 對於處理窗口消息,你可以使用Jawin - 它甚至有demo of how to handle window messages - 或者類似的東西。當然,如果你把你的Java程序綁定到像Jawin這樣的庫,它將永遠不會在非Windows機器上運行。爲了在Win32和Java之間進行簡單的交互,綁定在本地主機上監聽的套接字將是我最喜歡的選擇。該協議可能很簡單,但我更喜歡純文本協議,以便於調試。請注意,如果用戶終止程序,套接字連接可能會中斷。
- 您可以使用(本地)網絡服務,如其他帖子中的建議。雙方都要確保使用Web服務/ XML庫來構造和解析消息,如果要進行字符串連接,構建格式錯誤的XML就太容易了。
- 您可以將Windows程序的功能放入COM組件並使用Java-to-COM橋接器:Jacob或j-Interop是此類流行的免費庫文件,j-Integra似乎是傳統系統。
- 您可以將Java程序的功能放入COM組件並使用Sun的Java-ActiveX橋接器。從我個人的經驗來看,這是一個相當尷尬的選擇:Java-ActiveX網橋的開發自1.4開始就停滯不前,ActiveX的安裝會導致您的Java組件安裝在JRE目錄的某個位置,並在ActiveX容器內調試Java組件相當麻煩。
旁註:,如果你正在處理雙方弦,始終考慮到的Java處理字符串的東西從字節數組完全不同。特別是如果您使用的是Windows ANSI字符串,請注意字符81,8D,8F,90和9D在Windows-1252代碼頁中指定爲未定義,因此如果您的Windows字符串包含這些元素,Java將生成問號或例外。因此,如果可能的話,在Windows端使用WChar字符串或將自己限制爲安全字符。
3
不,你不能。
您必須創建一個網絡服務器並偵聽(本地)套接字。或者,也可以使用JNI。
1
的Java和Win32 bith implment了很多,所以有兩個應用程序通信是不可能的,一個只需要挑選常用的傳輸和協議,這兩個應用程序
一些選項相同的技術:
- 在進程之間創建一個tcp連接並將數據包發送到環回接口。
- 使用任何本地代碼的互操作,Java有(JNI?)訂閱自定義消息(該詞的win32感)
- 使用本機代碼,建立兩個過程
- 讀/寫之間的命名管道一個文本文件(不是最好的主意)
希望這有助於
4
您將需要創建一個網絡服務器,通過J16 SDiZ解釋。
- 一個簡單的方法是使用XML-RPC。現在有針對Java和任何其他語言的現成庫,而且很簡單。我們在我們的應用中使用它。但是,真的,任何網絡協議都可以。
- 對於非常簡單的情況,您也可以創建一個文件並從Java端進行輪詢。
- 你也可以使用命名管道:http://www.coderanch.com/t/328057/Java-General-advanced/java/Use-Named-Pipe-IPC-between
- 再有就是還RMI,但是這可能是你的(簡單的)目的矯枉過正。最後,您可以使用JNI直接訪問Window的本地通信機制。
就我個人而言,我會使用XML-RPC或其他一些簡單的標準化協議。
1
你可以使用命令行I/O流的命令來發送和檢索答案:
System.in
包裝成一個BufferedReader,並呼籲readLine()
System.out.println()
寫響應
我想Win32有方法來捕獲你啓動的應用程序的I/O流。
基本上在Windows相當於管道的Linux的方法:
ls | grep java
相關問題
- 1. 將命令發送到正在運行的java進程
- 2. 如何通過命令行將命令發送到正在運行的應用程序
- 3. 如何發送命令到正在運行的程序?批處理文件
- 4. 當命令行Java程序在工作時發送命令
- 5. 如何將命令發送到通過批處理命令行運行的EXE?
- 6. 將調試命令發送到在仿真器中運行的應用程序
- 7. 如何將數據發送到正在運行的進程?
- 8. 如何從bash發送命令到java程序中?
- 9. Notepad ++:腳本將輸入發送到正在運行的程序?
- 10. 發送命令到其他命令行程序
- 11. Java命令行,當守護程序正在運行
- 12. 將命令行傳遞給正在運行的應用程序
- 13. 使用命令行發送的參數運行程序
- 14. 如何通過udev將命令行參數發送到進程?
- 15. 從命令行運行Java程序
- 16. 從命令行運行Java程序
- 17. 從命令行運行Java程序
- 18. 運行命令行工具Java程序
- 19. 從命令行運行Java 3D程序
- 20. 從命令行運行Java程序Linux
- 21. 如何將消息發送到正在運行的應用程序(Node.js的)
- 22. 從shell命令訪問正在運行的java程序
- 23. 如何在命令行上運行java註釋程序?
- 24. 如何在Windows上從命令行運行Java程序?
- 25. 發送命令到正在運行的進程的傳統方式是什麼?
- 26. 如何在java程序的終端運行命令?
- 27. 如何將BAT文件中的命令發送到Windows中正在運行的NodeJS進程?
- 28. 如何從命令行運行程序?
- 29. 如何知道Eclipse用來運行java程序的命令行?
- 30. 如何從命令行或Web發現程序是否正在運行?
這肯定聽起來很優雅,但* *怎麼做我寫從一個Win32應用程序,它可以通過從System.in我的Java程序讀取的東西? – 2009-06-25 11:11:42