我从得到了这个问题头第一个Java由Kathy Sierra和Bert Bates。在这本书中的网络和线程部分,他们建立了一个聊天客户端,并通过启动一个单独的线程来处理收到的消息:分配一个while循环的布尔表达式
public class IncomingReader implements Runnable {
public void run() {
String message;
try {
while ((message = reader.readLine()) != null) { //reader is a BufferedReader from an InputStreamReader of a Socket
System.out.println("read " + message);
incoming.append(message + "\n"); //incoming is a JTextArea they declared earlier
}
} catch (Exception ex) {ex.printStackTrace();}
}}
并且此线程只启动一次,Swing的GUI和读者,他们安装后作家。
所以我的问题是,这个线程如何能够保持活着,并不断收听传入的消息。难道它不应该通过while循环并且当message
是null
时死?
'BufferedReader.readLine()'阻塞,它会等待,直到有东西可以读。请参阅[this](http://stackoverflow.com/questions/15521352/bufferedreader-readline-blocks) – BackSlash
不清楚'reader'是什么,但从您的描述来看,这是一个永不关闭的Socket输入流 –
@BackSlash非常有帮助链接。你可以将你的评论作为答案来说,所以我可以接受它吗? – liueri19