2017-02-23 58 views
0

我有一個項目使用ProcessBuilder來捕獲命令「java -jar someJar.jar -argument」的輸出,但現在已經將jar的源文件移動到單獨的包中; somepackage。該包有一個主函數,所以我想創建一個ProcessBuilder來捕獲該進程的輸出,就好像它是一個不同的Thread一樣。使用ProcessBuilder捕獲單獨包的輸出

這是可能的,還是我將不得不完全重新編寫代碼以允許它使用源文件而不是二進制文件?

+0

你混合的條件來混淆視聽的方式。 「你現在把jar的源文件移動到一個單獨的包中」是什麼意思?爲什麼這會提高運行「源文件而不是二進制文件」的願望(當然,如果不編譯它們,這是不可能的)? – Holger

回答

0

如果我假設是正確的,軟件包有主要功能,我們正在嘗試獲取使用java -jar processbuilder命令執行的主要方法的輸出。

ProcessBuilder pb = new ProcessBuilder(your java -jar command);  
Process process = pb .start(); 
process.waitFor(); 
BufferedInputStream in = new BufferedInputStream(process.getInputStream()); 
byte[] contents = new byte[1024]; 
int jwtOytputBytesRead = 0; 
String Output = ""; 
while ((jwtOytputBytesRead = in.read(contents)) != -1) { 
      Output += new String(contents, 0, jwtOytputBytesRead); 
    } 
System.out.println(Output); 

嘗試此鏈接,以及指定主類 Run class in Jar file

+0

是的,這就是我想要做的,但它需要線程化,因爲我需要不斷從它獲取輸出。 –

+0

如何嘗試在 java中可調用。示例:public class ProcessBuilderProcessor implements Callable {}然後使用執行程序\t \t ProcessBuilderProcessor pbp = new ProcessBuilderProcessor(「」); \t \t ExecutorService executr = Executors.newFixedThreadPool(1); \t \t Future future1 = executr.submit(pbp); – HaroonIsmailbasha