繁体   English   中英

Java线程似乎无法正常运行

[英]Java Thread doesn't seem to run properly

这是我第一次在堆栈溢出时在这里问一个问题,所以请多多包涵。 我会尽量保持简短。

我正在编写一个简单的客户端套接字android应用程序。 我连接到的服务器有一个名为Alice的聊天机器人。 我已经设法连接到服务器,并且收到消息“来自alice的问候”,但是该线程似乎停止了,因为我没有再收到任何消息。

这是一些代码:

    @Override
public void run() {

    try 
    {
        while (true)
        {
        String _input = _rd.readLine();
        if (_input != null)
        {
        _field.append("Alice : "+ _input+"\n");
        }
        else
        {
            _field.append("null");
        }
            sleep(50);
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
     catch (InterruptedException e) {
        e.printStackTrace();
    }
}

如您所见,即使我没有收到消息,我也尝试通过附加“ null”来对代码进行故障排除,但这在EditText中均未显示。

当用户按下按钮时,我从主Activity类调用.start()

        @Override
        public void onClick(View arg0) {

            setContentView(R.layout.second);
            InitiateSecondFrame();  

            _cs = new ClientSocket();
            String _check = _cs.EstablishConnection(_host.getText().toString(),
                    Integer.parseInt(_port.getText().toString()),
                    (EditText)findViewById(R.id.historyField));

            _cs.start();

            Toast.makeText(getApplicationContext(), _check, 100).show();
            SaveHostPort(_host.getText().toString(), _port.getText().toString());                           
        }
    }); 

ClientSocket类由Thread扩展并实现Runnable,我也尝试过扩展或实现。 我根本没有收到任何错误消息。 希望我所提供的信息足以让您意识到问题所在。 请记住,我是多线程和套接字的新手,所以我可能错过了一些基本知识。

如果有帮助,请按以下步骤启动线程:

Runnable runnable = new MyRunnableClass(); // has the run() method
new Thread(runnable).start();
_rd.readLine();

这是你的问题。 它将阻止并永远等待来自远程系统的输入,并且仅当它从远程系统检测到换行符时才返回接收到的内容。

线程未停止。 它只是在等待消息的到来。 _rd.readLine()将阻塞,直到读取了某行(以换行符char结尾)或连接结束为止。 因此,如果Alice保持连接打开并且不发送任何内容,则readLine将永远被阻止,并且您的“ null”消息将永远不会被打印。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM