2009-06-25 101 views

回答

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了很多,所以有兩個應用程序通信是不可能的,一個只需要挑選常用的傳輸和協議,這兩個應用程序

一些選項相同的技術:

  1. 在進程之間創建一個tcp連接並將數據包發送到環回接口。
  2. 使用任何本地代碼的互操作,Java有(JNI?)訂閱自定義消息(該詞的win32感)
  3. 使用本機代碼,建立兩個過程
  4. 讀/寫之間的命名管道一個文本文件(不是最好的主意)

希望這有助於

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 
+0

這肯定聽起來很優雅,但* *怎麼做我寫從一個Win32應用程序,它可以通過從System.in我的Java程序讀取的東西? – 2009-06-25 11:11:42

相關問題