Java Thread似乎无法正常运行

时间:2011-09-14 12:11:17

标签: java multithreading sockets chat runnable

这是我第一次在堆栈溢出时问一个问题,所以请耐心等待。 我会尽量保持这个简短。

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

以下是一些代码:

    @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,我也尝试过只是扩展或实现。 我根本没有收到任何错误消息。 我希望我提供的信息足以让你意识到什么是错的。 记住我是多线程和套接字的新手,所以我可能错过了一些基本的东西。

3 个答案:

答案 0 :(得分:1)

如果有帮助,这就是你开始一个主题的方法:

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

答案 1 :(得分:0)

_rd.readLine();

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

答案 2 :(得分:0)

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