[英]How to read until end of file (EOF) using BufferedReader in Java?
[英]How to interrupt a read operation using BufferedReader (Java)?
您好,雖然我閱讀了很多其他答案,但我不明白如何在不發送輸入的情況下關閉 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。
您可以在調用BufferedReader.readLine()
之前檢查是否有可用數據,即
while(true) {
if (!listening) break;
if (System.in.available() > 0) {
try {
fromUser = stdIn.readLine();
// etc.
您必須使用thread.interrupt
向線程發出信號以中斷其進程。 准備好捕獲線程啟動的InterruptedException
。
http://docs.oracle.com/javase/tutorial/essential/concurrency/interrupt.html
我想你可以使用 stdIn.close() 關閉你的 BufferedReader;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.