Чат (14)

  • 28
  • Недоступна
Приступим к написанию главного функционала класса Client. 1) Добавь метод public void run(). Он должен создавать вспомогательный поток SocketThread, ожидать пока тот установит соединение с сервером, а после этого в цикле считывать сообщения с консоли и отправлять их серверу. Условием выхода из цикла будет
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (113)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
barracuda28 уровень, Санкт-Петербург
11 сентября, 06:58
Если что, метод run() не нужно делать во внутреннем классе SocketThread.(По крайней мере на этом этапе). Просто создаем run() в классе Client
Сергей31 уровень, Москва
16 сентября, 05:02
это и написано в условии. Зачем создавать метод в SocketThread, если об этом не просят?
barracuda28 уровень, Санкт-Петербург
16 сентября, 06:19
Зачем? Сложно сказать. Я создал run() на одном из предыдущих этапов, как только попросили сделать это: public class SocketThread extends Thread{... я сразу же автоматом по привычке добавил это: @Override public void run(){... ------------- НУ и как следствие, на этом шаге впихнул реализацию метода run() во внутренний класс, чего не нужно было делать. И предостерегаю остальных от этого, на всякий случай.
Vladislav Shamshurin29 уровень, Ижевск
16 июля, 09:29
Не проходило потому что написал
if (str.toLowerCase().equals("exit")) break;
убрал toLowerCase() - прошло... бред
Елена Попова32 уровень
10 июля, 14:02
В цикле пока не сделала отдельную переменную String line = ConsoleHelper.readString(); валидатор не принимал
Евгений38 уровень, Санкт-Петербург
9 июля, 07:57
Два раза получит тайм-аут от валидатора, а почему? А потому, что ожидал команду 'exit', а не просто exit.
midicq199332 уровень
6 июля, 09:21
Что за фигня...Отчаялся на этой задаче, изменял код и пускал на проверку(забил на количество попыток) и вот решил закомментировать вот эту часть: д) После того, как поток дождался нотификации, проверь значение clientConnected. Если оно true - выведи "Соединение установлено. Для выхода наберите команду 'exit'.". Если оно false - выведи "Произошла ошибка во время работы клиента.". и тут валик принял задачу 😐
Андрей Киров31 уровень, Екатеринбург
30 июня, 09:53
д) После того, как поток дождался нотификации, проверь значение clientConnected. ПРОВЕРЯТЬ дождался он или нет - не надо. Т.е. никаких проверок на isAlive и прочего.
Pavel Kuzmin32 уровень, Москва
20 июня, 08:53
очень сильно залип с wait и notify. Пересмотрел много вариантов кода у других, но так и не увидел реализацию run() в SocketThread. Хотя по условию говорят, что этот объект должен установить соединение (clientConnected = true) и разбудить наш основной объект (Client client) с помощью notify(). Если кто-то тоже с этим запарился то выстраивайте следующую логику: synchronized(OuterClass outer){ wait() } synchronized(OuterClass.this){ OuterClass.this.notify() } т.е. суть в том, что бы синхронизация, ожидание и оповещение происходило по одному объекту
Alexey Prilessky34 уровень, Минск
30 мая, 19:34
Объясните кто может: в чем разница между Thread.currentThread.wait() и просто wait() ? По моему это должно быть одно и то же, ведь и в том и в другом случае это поток main. Но если использовать первый вариант, то валидатор впадает в бесконечность и делает тайм аут
Leonid41 уровень, Киев
18 мая, 08:56
Сделал все по пунктам условия и прошел с первой попытки. Но польза от такого решения достаточно сомнительная - просто реализуешь придуманную кем-то архитектуру...
Vladimir Komarov39 уровень, Волгоград
19 мая, 12:23
Ну не скажите, а опыт в борьбе с валидатором ? ))
Не ну это не серьезно31 уровень, Киев
17 мая, 08:21
Хех, когда метод run сделал private и он по всем пунктам показывал ошибки.. сидишь и думаешь что за хня))