2012-12-14 47 views
2

我有一個Java-Gnome GUI,它啓動一個單獨的線程來運行我沒有代碼的命令行程序。我想在GUI中顯示一個進度條,以顯示第二個線程已完成的百分比。是否有可能跟蹤控制外部程序的線程的進度?

鑑於我/我的程序不控制外部程序,這是可能的還是我卡在一個不確定的脈衝進度條?謝謝

+2

先猜:不,這是不可能的。不知道第二個線程是做什麼的。 – Burkhard

+1

外部命令行程序是否通過文本輸出報告其進度,還是保持沉默? – Philipp

+0

這是一個名爲auCDtect的程序 - 我將它傳遞給音軌名稱,並且它返回與每個音軌有關的文本輸出 - 這是由流水線處理的, 我懷疑這可能會回答我的問題......謝謝! – db579

回答

6

當命令行程序在控制檯中報告它的進度時,可以在Java應用程序中讀取此輸出。爲了做到這一點,你必須使用ProcessBuilder創建Process對象:

ProcessBuilder processBuilder = new ProcessBuilder("yourCommandLineProgram"); 
Process process = processBuilder.start(); 
OutputStream outputStream = process.getOutputStream(); 

現在你可以閱讀outputStream對象來獲取命令行程序的文本輸出。

這當然只會在命令行程序向stdout報告進度以及何時可以使用此輸出來確定剩餘工作量時幫助您。當程序沒有公開這些信息時,就沒有辦法找到它的進展(實際上,根據halting problem,如果沒有完全執行它,就不可能知道程序運行了多長時間)。

相關問題