你好,虽然我读了很多其他的回答我不明白如何关闭BufferedReader而不发送输入。这是我的程序的阻止部分:
public class AuctionClientUserListener extends Thread {
private PrintWriter out;
private BufferedReader stdIn;
private int udpPort;
private boolean running = true;
private boolean listening = true;
// needs server connection out
public AuctionClientUserListener(BufferedReader stdIn,PrintWriter out,int udpPort) {
this.stdIn = stdIn;
this.out = out;
}
public void run() {
String fromUser;
while(true) {
if(!listening) {
break;
}
try {
fromUser = stdIn.readLine(); // BLOCKS
if (fromUser != null) {
System.out.println("Me: " + fromUser);
// check if to send udp port
String[] spinput = fromUser.split(" ");
if(spinput[0].equals("!login")) {
fromUser+=" "+udpPort;
}
out.println(fromUser);
if(fromUser.equals("!end")) {
listening = false;
}
}
} catch(Exception e) {
listening = false;
}
}
running = false;
}
public boolean running() {
return running;
}
public void endListening() {
this.listening = false;
}
}
当我从主线程调用“endListening()”时,程序终止 - 但不是在用户输入任何内容之前。我想让程序立即终止 - 如何使用这个BufferdReader(像BufferedReader(new InputStreamReader(System.in))这样创建)?
我试图在主线程中调用此线程上的stdIn.close()和thread.interrupt(),但它不起作用。我还试图关闭主线程中的InputStreamReader。
答案 0 :(得分:1)
您可以在致电BufferedReader.readLine()
之前查看if there's data available,即
while(true) {
if (!listening) break;
if (System.in.available() > 0) {
try {
fromUser = stdIn.readLine();
// etc.
答案 1 :(得分:1)
您必须使用thread.interrupt
来通知线程中断其进程。准备好抓住线程发起的InterruptedException
。
http://docs.oracle.com/javase/tutorial/essential/concurrency/interrupt.html
答案 2 :(得分:0)
我想你可以使用stdIn.close();
关闭你的BufferedReader