2011-12-13 30 views
3

我正在嘗試與舊系統集成。遺留系統使用對話窗口報告錯誤。除了對話窗口外,它沒有任何返回代碼。我用Runtime.exec()啓動遺留系統。調用Runtime.exec後檢測圖形界面()

有沒有辦法來檢測執行的程序是否產生了對話窗口或任何其他圖形界面?該解決方案在Windows中完成,執行的程序是一個exe文件。

回答

0

所以我做的解決方案是使用@Gerrett Hall鏈接到的代碼片段代碼。該代碼段代碼在我運行命令並保存名稱之前檢查活動窗口。

然後,如果命令沒有返回,則檢查活動窗口是否發生了變化。如果有,則終止該進程(替換髮送全局返回鍵)。

要從對話框中獲取信息,我可以使用Ctrl + C複製對話框的內容並閱讀粘貼緩衝區以將消息複製到日誌中。還沒有弄清楚那個部分。

是的,這是一個醜陋的黑客,但遺留系統也是如此。

1

如果遺留系統在控制檯中報告錯誤,可能會得到你的錯誤。
只需輸入錯誤的輸入流並進行閱讀。

像這樣:

Runtime rt = Runtime.getRuntime(); 
Process proc = rt.exec(cmd); 
// any error message? 
InputStream error = proc.getErrorStream(); 
InputStreamReader isr = new InputStreamReader(error); 
BufferedReader br = new BufferedReader(isr); 
String line=null; 
while ((line = br.readLine()) != null) 
     System.out.println(" ERROR >" + line); 

我推薦閱讀:Runtime.exec() quirks

希望這有助於。

+0

我害怕不起作用。正如我傷心,它只與圖形窗口交互。 stderr上沒有任何東西。 –

1

您可以使用此JNA snippet來查詢您的進程啓動的窗口。

AFAIK,您只能從使用Java Process API的進程中獲取標準錯誤輸出流。