2014-05-16 58 views
0

我需要在命令行中執行命令並將其打印在控制檯上。我通過process Builder完成了它。 它正在打印批量輸出(即)它等待整個命令完成執行並最終打印出來,但我想立即打印。每行打印命令行時必須同時打印在控制檯中。當我嘗試調試我發現它是逐行打印。從命令行在控制檯中逐行打印

final BufferedReader m_stdOutput; 
      final BufferedReader m_stdError; 
      probuilder.directory(new File("C:\\sss")); 
      Process m_process = null; 
      try { 
         m_process = probuilder.start(); 
        } catch (IOException e1) { 
         e1.printStackTrace(); 
        } 
        m_stdOutput = new BufferedReader(new InputStreamReader(m_process.getInputStream())); 
        m_stdError = new BufferedReader(new InputStreamReader(m_process.getErrorStream())); 

        Thread m_outputThread = new Thread() { 
         public void run() { 
          String line; 
          try { 
           while ((line = m_stdOutput.readLine()) != null) { 
           System.out.println(line); 
           }} catch (IOException e) { 
           e.printStackTrace(); 
          } 
         }; 
        }; 
        m_outputThread.start(); 
        Thread m_errorThread = new Thread() { 
         public void run() { 
           String line1; 

          try { 
           while ((line1 =m_stdError.readLine()) != null) { 
            System.out.println(line1); 
           }} catch (IOException e) { 
           e.printStackTrace(); 
          } 
         }; 
        }; 
        m_errorThread.start(); 
+0

儘量不要使用BufferedReader並從InputStream本身打印每個字符...... – MadProgrammer

回答

0

ProcessBuilder具有消除對I/O,需要單獨的線程的方法:

probuilder.directory(new File("C:\\sss")); 
probuilder.inheritIO(); // Added 
Process m_process = null; 
try { 
    m_process = probuilder.start(); 
} catch (IOException e1) { 
    e1.printStackTrace(); 
} 

inheritIO線使IO流的過程作爲IO爲Java流相同程序,所以你不需要這些線程。如果你讓Java爲你做這項工作,它會正常工作。