更新:我找到了为什么这可能不起作用的关键部分!我使用了System.setOut(out);其中out是一个特殊的PrintStream,用于将信息输出到JTextArea中
这是代码,但我遇到的问题是只有当我结束进程时才会打印出信息。
public Constructor() {
main();
}
private void main() {
btnStart.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
ProcessBuilder builder = new ProcessBuilder("java", textFieldMemory.getText(), "-jar", myJar);
Process process = builder.start();
InputStream inputStream = process.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream), 1);
String line;
while ((line = bufferedReader.readLine()) != null) {
System.out.println(line);
}
inputStream.close();
bufferedReader.close();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
});
}
当前输出:
Line 1
Line 2
Line 3
Line 4
Line 5
这是正确的输出结果,但在我结束进程时,它只被打印成一个大块。
有人知道问题出在哪里吗?如果知道,能否帮助解释一下为什么会出现这种情况,提前感谢您。
BufferedReader
缓冲区大小设置为1:new BufferedReader(new InputStreamReader(inputStream), 1)
。 - DaoWenprocess.waitFor
,也没有创建任何额外的线程。 - Ciphor