2012-06-21 416 views
3

我想將我的Java程序中的文件推送到Android模擬器。現在,我可以使用ProcessBuilder啓動模擬器並捕獲logcat消息。但是,無論何時我試圖在進程生成器中使用adb push命令,進程都會掛起,並且不會生成輸出。從java執行adb命令

的代碼:

try { 
    ProcessBuilder proc = new ProcessBuilder("D://android-sdk//platform-tools//adb.exe", 
              "push D:\\final.xml /mnt/sdcard/final.xml"); 
    Process p = proc.start(); 
    BufferedReader br2 = new BufferedReader(new InputStreamReader(p.getInputStream())); 
    while ((line = br2.readLine()) != null) 
     System.out.println(line); 
} catch (Exception e) { 
    System.err.println("Error"); 
} 

編輯: - 實測值的probabble溶液。我使用Process.waitFor()方法,但不存儲它返回的退出碼。現在,當我這樣做:

int exitVal = p.waitFor(); 

一切工作作爲一種魅力。

And @Marc Van Daele 感謝您的輸入。根據我的經驗,ProcessBuilder以兩種方式工作,即。您可以使用由空格或逗號分隔的參數。 :)

+0

單獨的參數說實話,我認爲這是不可能的存儲WAITFOR的返回值可以解決這個問題。我寧願認爲,有時候,你已經足夠快地從InputStream中讀取數據(然後它可以正常工作),有時候你不會,然後你就會遇到'掛起'的問題。 –

+0

是的..在我做了編輯之後..對我來說也覺得有點奇怪。但是現在我已經有一段時間沒有面臨同樣的問題。 感謝您的幫助guyz :) – user1471910

回答

4

不應該這樣像

ProcessBuilder proc = new ProcessBuilder("D://android-sdk//platform-tools//adb.exe", "push", "D:\\final.xml", "/mnt/sdcard/final.xml"); 
+0

是的..試圖..不起作用。 Outputstream獲取null – user1471910

+0

您正在閱讀p.getInputStream()?我認爲你應該閱讀OutputStream和ErrorStream。可能吧,設置proc.redirectErrorStream(true)也是一個好主意;並只讀取OutputStream。可能你遇到了「因爲一些本地平臺只爲標準輸入和輸出流提供有限的緩衝區大小,未能及時寫入輸入流或讀取子流程的輸出流可能導致子進程阻塞甚至死鎖。」如http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Process.html –

+0

中所述,忽略上面的輸入vs輸出流的我(不正確)評論。但我的評論的其餘部分是有效的。 –