我用Java执行一个进程。该进程永远不会终止并扫描机器查找某个文件,当它发现其中一个文件打印文件的路径时。我想在一段时间内执行该过程并获得输出。这是我的一段代码
BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()));
Process p = pb.start();
while ((System.currentTimeMillis() <= endTime )){ //loop 1
while((line=stdInput.readLine()) != null){ loop 2
System.out.println(line);
}
}
p.destroy();
问题是,如果脚本在短时间内没有找到结果,那么2将退出并且在此期间不会再次运行。
我也试过
while ((System.currentTimeMillis() <= endTime ) || (line=stdInput.readLine()) != null))
但是在这种情况下,如果stdInput.readLine()
仍然返回结果,即使时间结束,循环也不会结束。
while ((System.currentTimeMillis() <= endTime ) && (line=stdInput.readLine()) != null))
在这种情况下,即使时间没有结束,如果line=stdInput.readLine()
没有返回结果,循环也会退出
修改 我试过这段代码
System.out.println("Before while");
while ((System.currentTimeMillis() <= endTime ){
System.out.println("while");
if(line=stdInput.readLine())!= null){
System.out.println("One line");
}
}
p.destroy();
如果进程未检测到任何内容,则循环永远不会结束,这就是输出
确定 之前 而
的System.out.println(&#34;而&#34);被称为只有一次它应该被召唤5秒。
答案 0 :(得分:2)
你的意思是:
while ((System.currentTimeMillis() <= endTime ){
if(line=stdInput.readLine())!= null){
System.out.println(line);
}
}
答案 1 :(得分:0)
尽量不要使用短圈&amp;&amp;。
使用&amp;,这将确保检查两个条件。随着&amp;&amp;如果第一个是假的,整个事情都是短暂的。
你想让readLine()执行即使不对吗?与&amp;&amp;如果第一个条件为假,则永远不会考虑第二个条件。
&安培;将检查两者然后做出决定。
答案 2 :(得分:0)
如果stdInput来自扫描仪,它可能永远不会为空。再展示一下你的代码。
至于madmax所说的,是的,做短路。对于0和1 = 0,这意味着0和某事= 0。它是数学。