2010-11-16 66 views
0

我試圖從我的應用程序中的外部應用程序獲取控制檯輸出。當我從我的代碼調用externall應用它掛與消息:Log4j掛我的應用程序

配置日誌...

配置從log4j的:C:\ GPAT \ log4j.cfg

並沒有任何反應。我通過互聯網搜索,似乎它可能是線程問題。但我不能修改這個外部應用程序,我必須通過log4j。我讀了外部應用程序是這樣的:

StringBuffer output = new StringBuffer();

try { 
     Runtime rt = Runtime.getRuntime(); 
     Process proc = rt.exec(GSATCommand); 
     BufferedReader input = new BufferedReader(new InputStreamReader(proc.getInputStream())); 
     System.out.println("Test running..."); 
     String line = null; 
     while ((line = input.readLine()) != null) { 
      System.out.println(line); // Writes the test output to console 
      output.append(line); output.append("\n"); 
     } 
     int exitVal = proc.waitFor(); 
     System.out.println("Process exitValue: " + exitVal); 
     System.out.println("Test successfully executed"); 
    } catch (Throwable t) { 
     t.printStackTrace(); 
    } 

感謝您的閱讀。

回答

2

你需要消耗從衍生進程stdout和標準錯誤在單獨線程,以防止阻塞行爲(您的衍生進程將寫入緩衝區,並阻止如果這些緩衝區不會被你的消費過程清空) 。

請參閱this answer的第2段以獲取更多詳細信息和指向合適修補程序的鏈接。

+0

非常感謝你,我帶着你的指南來解決問題 – MartK 2010-11-16 14:53:10