2012-11-23 33 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

相关问题