我正在使用以下代码从Java执行脚本。
try (BufferedReader input = new BufferedReader(new InputStreamReader(Runtime.getRuntime()
.exec("ruby test.rb").getInputStream()))) {
String line = null;
while ((line = input.readLine()) != null) {
System.out.println("Got line: " + line);
}
}
test.rb
只是:
puts "one"
sleep 1
puts "two"
问题是所有输入都同时到达BufferedReader
。两条线之间应该有1秒的延迟。有没有办法在脚本中的每一行之后刷新Inputstream
?
我正在努力实现的目标
我想从Java GUI调用一些Ruby脚本,并使脚本的输出在文本窗格中逐步显示。使用上面的代码,当脚本终止时,脚本中的STDOUT会立即显示在textpane中(并且Inputstream
可能已刷新)。
编辑:
问题是Ruby正在缓冲STDOUT。由$stdout.sync = true
修正。
答案 0 :(得分:-1)
您是否在System.out.println()之后尝试了Thread.sleep(1000)。你必须捕获一些InterruptedException。你的编辑肯定会告诉你。