【发布时间】:2015-03-09 16:17:34
【问题描述】:
在 UI 上执行事件后,我正在读取服务器日志文件。我有一个while循环,它等待某些条件匹配,然后返回日志的那一行。但是,有时在代码查看日志之前发生事件并且无法获取新行的情况。这会导致 while 循环挂起,并一直挂起,直到在提供的条件下发生另一个事件。由于显而易见的原因,这是有问题的。不管是什么情况,有没有办法在几秒钟后跳出 while 循环?以下是我的代码
public String method(String, a, String b, String c) {
channel = session.openChannel("exec");
((ChannelExec) channel).setCommand(a + "\n" + b);
channel.connect();
fromServer = new BufferedReader (new InputStreamReader(channel.getInputStream()));
String time = methodToFireAnEventInUI();
Thread.sleep(2000);
String x = null;
while (true){
x = fromServer.readLine();
if(!x.equals(null) && x.contains(c) && x.contains(time)){
break;
}
}
msg = x.toString();
}catch (Exception e){
e.printStackTrace();
}
closeConnection();
return msg;
}
如果你看上面的代码,它就挂在“x = fromServer.readline();”处只是不会去任何地方,这就是我希望它的逻辑等待 x 时间并在那之后中止循环的地方。 我在 while 循环之前尝试“thread.sleep”也不起作用。
【问题讨论】:
-
readline是一个阻塞调用。您无法在同一个线程中执行任何操作来解决呼叫挂起问题。
标签: java while-loop