【发布时间】:2013-03-25 22:17:40
【问题描述】:
UPDATE: I found a crucial part to why this probably isn't working! I used System.setOut(out); where out is a special PrintStream to a 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,试试直接从InputStream读取内容看看有没有区别 -
我同意@MadProgrammer 的观点,即问题可能出在缓冲区上。但是,我建议使用its two parameter constructor 将
BufferedReader缓冲区大小设置为1:new BufferedReader(new InputStreamReader(inputStream), 1) -
使用 ByteArrayOutputStream 会更好吗?我对流完全陌生,这让我很烦恼 XD
-
在这种情况下,我只使用一个小的
byte数组并直接从InputStream中读取。我这样做的主要原因是因为并非所有进程都将换行符作为输出的一部分发送,这意味着有时,您没有得到任何输出,并且进程似乎永远不会死 -
我怀疑你的缓冲阅读器是问题所在。两个简单的问题:你在使用
process.waitFor吗?您是否在单独的线程上读取流输出?
标签: java printing inputstream