我使用bufferedReader从用户读取System.in,用户将输入以空格分隔的域地址和源地址。
eg
auckland.ac.nz. 198.19.20.44
www.esc.auckland.ac. 173.27.28.93
stat.auckland.ac.nz. 52.159.152.105
student.auckland.ac.nz. 64.247.240.232
现在的问题是,一旦用户完成输入数据,输入流就不会终止,因此程序不会被执行。我已经为BufferedReader编写了一些代码,如果有人愿意检查它并告诉我哪里出错了我会非常感激。请注意两个变量“count”和“n”,无论如何我可以使用它来帮助解决这个问题吗?
try {
String fqdn, src, key, temp;
Integer count;
int n = 0;
while ((temp = br.readLine()) != null){
int divide = temp.indexOf(" ");
fqdn = temp.substring(0, divide); // divide the input
src = temp.substring(divide+1);
key = fqdn + " " + src;
//System.out.printf("%d: %s\n", n, key);
dht.lookup(key);
n += 1;
}
br.close();
} catch (NoSuchElementException e) {
//System.out.printf("end-of-file\n");
}
答案 0 :(得分:4)
当readLine()
返回null
时,循环将终止。发生这种情况的唯一方法是将标准输入关闭。用户可以通过键入 Ctrl + D 来完成此操作,但这对于典型用户来说可能太多了。一个简单的选择是要求他们在完成后键入“完成”;然后你的循环应检查该值,而不是null
。
答案 1 :(得分:2)
我要看的是Observer Pattern
http://en.wikipedia.org/wiki/Observer_pattern和多线程相关的内容,例如wait()
- 使用此链接:How can I set a timeout against a BufferedReader based upon a URLConnection in Java?