2012-11-23 87 views
1

雖然我讀了很多其他答案,但我不明白如何在不發送輸入的情況下關閉BufferedReader。這是我計劃的阻隔部「)endListening(」從主線程如何使用BufferedReader(Java)中斷讀取操作?

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; 
    } 
} 

當我打電話,程序終止 - 而不是之前用戶輸入任何東西。我想程序立即終止 - 如何intterupt這個BufferdReader(創建像BufferedReader(new InputStreamReader(System.in)))?

我試圖在主線程中調用stdIn.close()和thread.interrupt(),但它不起作用。我也嘗試關閉主線程中的InputStreamReader。

+0

嘗試使用掃描儀而不是BufferedReader。 – ChadNC

+0

有沒有可能用Buffered Reader解決它? – Blackbam

+0

人們被標題分散注意力。我會建議一個標題,如「中斷讀取操作」或「解除讀取操作」。 – SJuan76

回答

1

你可以檢查一下if there's data available調用BufferedReader.readLine()之前,即

while(true) { 
    if (!listening) break; 
    if (System.in.available() > 0) { 
     try { 
      fromUser = stdIn.readLine(); 
      // etc. 
+2

如果在輸入流中有一個字符'a',則您的檢查將通過,但'readLine'仍將阻止等待結束字符。 – SJuan76

+0

很好,解決了這個問題。儘管我仍然懷疑是否還有其他可能性。 – Blackbam

0

我認爲ü可以關閉使用stdIn.close()您的BufferedReader;

+0

那不行。 – Blackbam

相關問題