2016-02-09 6 views
0

Я создаю систему чата, где мне нужно подождать, чтобы получить пользовательский ввод (отправитель), а также одновременно отобразить ответное сообщение (из приемника).Проблема с методом readLine()

Так я использую время цикла для приема и отправки сообщений:

while((text = inFromUser.readLine()) != null) //Msg from Sender 
{ 
    while((data_from_server=inFromServer.readLine()) != null) //Msg from receiver 
    { 
     System.out.println("Displaying Output=" + data_from_server); 
     System.out.println(data_from_server); 
    } 
    System.out.println("Getting Input=" + text); 
    outToserver.writeBytes(text + "\n"); 
} 

Моя проблема, клиент может послать входы снова и снова, в то время как приемник может/не может отправить ответ обратно. Но, по моей логике, он всегда ожидает ввода от приемника и вице-Versa. Пожалуйста, предложите исправить эту проблему.

ответ

3

Вам понадобится более одного потока. Подумайте об этом - вам нужно подождать, пока пользователь не войдет в некоторые данные, и когда это произойдет, немедленно отобразите его. Вам также нужно подождать, пока сервер не предоставит вам некоторые данные, и немедленно отобразите , что.

Вы не можете дождаться моментально; если вы это сделали, ничего не будет отображаться до тех пор, пока пользователь и сервер не войдут в строку. Вы не можете дождаться одного, затем другого; если вы это сделали, клиент не смог прочитать то, что они написали, пока сервер не отправил сообщение, или наоборот.

Необходимо, чтобы к вам одновременно нужно было подключиться, , но работает бок о бок. Вы хотите выполнить действие, как только кто-то из них что-то вернет. Это означает, что вам нужно запустить второй поток. Один поток ждет пользователя, и один поток ждет сервера.

+0

Этот ответ был бы более ясным без двух противоречивых утверждений: «Вы не можете дождаться обоих одновременно; _», но «вам нужно подождать одновременно в обоих случаях», – jaco0646

+0

Но бок о бок, и это можно сделать только с двумя потоками. –

Смежные вопросы