【发布时间】:2012-03-09 13:21:31
【问题描述】:
现状
我正在执行一个外部应用程序(通过使用Runtime.getRuntime().exec...例如here)并且我正在监听应用程序写入标准输出的流。
该部分按预期工作,我得到了结果(在 grails 控制器中),逐行,因为它们是可用的,并且 - 当流没有更多内容时 - 我在页面上呈现结果.
另一方面是从 gsp 页面异步启动该应用程序。这也已经涵盖,并且调用了 remoteFunction(对上述控制器方法),结果被收集并返回,并且它们正确地显示在页面上的指定区域。
但是,困扰我和我真正想要实现的是:
目标
显示从流中读取的行在读取时,而不是在整个流完成之后(就像现在这样)。
这意味着(例如)为流读取循环中的每一行调用渲染:
while ((line = bri.readLine()) != null) {
System.out.println(line);
//render line here?
}
这可以实现吗?
请解释一下:)
【问题讨论】:
-
你试过你自己的例子吗?
-
是的。页面只有在控制器方法退出时才会得到响应。
-
你确定你使用的例子足够大吗?您可以尝试每隔一段时间在输出流上显式调用
flush。 -
@TedNaleid “模拟器”是一个 DOS 批处理脚本,其中包含
sleep 1回显几行。 System.out(在流读取器循环中)在出现时打印行。问题是我无法在页面上显示相同的内容,但只有在控制器方法退出后(即当remoteFunction中的onComplete被回调时)