【问题标题】:Assignment in a boolean expression of a while loopwhile循环的布尔表达式中的赋值
【发布时间】:2017-03-12 08:44:10
【问题描述】:

我从 Kathy Sierra 和 Bert Bates 的 Head First Java 那里得到了这个问题。在本书的网络和线程部分,他们构建了一个聊天客户端并通过启动一个单独的线程来处理传入的消息:

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 和读取器和写入器之后。

所以我的问题是,这个线程如何能够保持活力并继续监听传入的消息。当messagenull 时,它不应该越过while 循环并死掉吗?

【问题讨论】:

  • BufferedReader.readLine() 被阻塞,它会等到有东西要读。见this
  • 不清楚reader是什么,但从你的描述来看,是一个永远不会关闭的Socket输入流
  • @BackSlash 非常有用的链接。您能否将您的评论作为答案,以便我接受?

标签: java multithreading


【解决方案1】:

BufferedReader 将继续读取输入,直到它到达末尾。但是如果没有什么要读的,那么它会一直循环或者等到有输入。

BufferedReader readLine() blocks

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-01
    • 2020-12-03
    • 2017-11-20
    • 2014-01-17
    • 2016-01-13
    • 2015-05-24
    相关资源
    最近更新 更多