2014-05-16 59 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为你做这项工作,它会正常工作。