我需要在命令行中执行命令并在控制台上打印它。我是通过流程生成器完成的。 它是打印批量输出。(即)它等待整个命令完成执行并最终打印。但我想立即打印。在命令行上打印的每一行必须同时在控制台中打印。当我尝试调试我发现它是逐行打印的。
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 :(得分: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流与Java程序的IO流相同,因此您不需要这些线程。如果让Java为您完成工作,它将正常工作。