文章版權由作者李曉暉和博客園共有,若轉載請於明顯處標明出處:http://www.cnblogs.com/naaoveGIS/
1.背景
在某個項目中需要考慮使用java后台調用由C#編寫的切圖程序(exe),並且前端能夠獲取到切圖的進度和相關描述信息。
2.解決思路
a.首先改造切圖程序為接受參數從Main函數傳遞。
b.編寫java后台傳參調用exe的函數。
c.解決通信問題。
3.具體實現
3.1改寫C#窗體程序
C#中的入口程序為Main函數,其中Main函數默認是沒有參數的,如果添加參數,其只支持一個String數組參數,入口改寫如下:
將需要傳入的參數寫在args數組中,后續業務邏輯上因此做相關改寫即可。
3.2java端傳參調用
Java中可以利用Process類進行對exe或者是命名行cmd進行調用。具體例子如下:
其中exec為傳參調用,而waitFor函數為當前線程等待函數,並可獲取到由該 Process 對象表示的進程終止后返回的值。
如果exe中不設置返回參數,則默認執行正確為0。
3.3通信設計
3.3.1方案一
a.前端發出請求,等待回應。
b.后台接受請求,調用起exe。
c.exe執行完后將信息寫入到指定文本中。
d.java端監聽程序執行完畢后,獲取指定文本。
e.解析文本中的信息。信息可以按照自定義規則組織,傳達所需表示的含義。
f.將解析后的數據返回給前端。
優點:
前端無需輪詢,等待返回結果即可。
缺點:
會出現請求超時問題,並且無法知道exe執行的目前狀態。
3.3.2方案二
a.前端發出請求,並開始定時觸發程序狀態查詢請求。
b.后台接受請求,調用起exe。
c.exe執行過程、完畢均向指定文本中寫入信息。
d.前端狀態查詢請求,不斷讀取指定文本中的狀態信息,在前端進行相關展示。
優點:
規避請求超時問題,可以實時獲取程序進程。
缺點:
前端需要進行定時狀態輪詢請求。
-----歡迎轉載,但保留版權,請於明顯處標明出處:http://www.cnblogs.com/naaoveGIS/