Java Thread не работает должным образом - PullRequest
0 голосов
/ 14 сентября 2011

Это первый раз, когда я задаю вопрос здесь при переполнении стека, так что терпите меня.Я постараюсь сохранить это вкратце.

Я пишу простое клиентское приложение для Android-сокетов.На сервере, к которому я подключаюсь, есть чат-робот по имени Алиса.Мне удалось подключиться к серверу, и я получаю сообщение «Привет от Алисы», но затем кажется, что поток останавливается, потому что я больше не получаю сообщений.

Вот некоторый код:

    @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.

Я звоню .start() из моего основного класса Activity, когда пользователь нажимает кнопку.

        @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 ]

1 голос
/ 14 сентября 2011

Если это поможет, вот как вы начинаете тему:

Runnable runnable = new MyRunnableClass(); // has the run() method
new Thread(runnable).start();
0 голосов
/ 14 сентября 2011

Тема не остановлена. Это просто ожидание сообщения. _rd.readLine() будет блокироваться до тех пор, пока не будет прочитана какая-либо строка (заканчивающаяся символом новой строки), или пока не закончится соединение. Поэтому, если Алиса поддерживает соединение открытым и ничего не отправляет, readLine будет блокироваться навсегда, и ваши «нулевые» сообщения никогда не будут напечатаны.

0 голосов
/ 14 сентября 2011
_rd.readLine();

ваша проблема здесь.Он заблокирует и будет ждать ввода от удаленной системы навсегда и будет возвращать контент, полученный только тогда, когда обнаружит символ новой строки из удаленной системы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...