Java — Хэлп. Java Пишу чат и не пойму в чем ошибка.


Содержание

Не понимаю в чем ошибка

Только начал учить яву, сейчас знаю только С++. В общем решил поэксперемнтировать с пакетами:

Первый пакет у меня выглядит так:

10.11.2020, 22:25

не понимаю, в чем ошибка, JAVA
Не позволяет выполнить сортировку в таблице данных типа String, не могу понять в чем дело .

Инкапсуляция. Наследование. Полиморфизм. Не понимаю в чем моя ошибка
Само задание: Реализовать класс BytesConverter с полем bytes. В конструкторе присвоить bytes.

Может быть я что-то не понимаю? Подскажите, где ошибка.
Здравствуйте! Снова я, наверняка уже поднадоевший вам @asn007, со своими дибильными вопросами.

Справка по Java: как исправить эту ошибку?

В моем классе мы работаем над java-программой, которая создает «карты» с номиналом и костюмом. Он использует два файла, один из которых является бегуном, а один — классом. Однако я был в шоке от серии ошибок в моем коде, которые я не могу понять, как избавиться.

Это мой код для класса карты:

Часть, которая дает мне проблемы, — setSuit() и setFace().

перед этим я пробую This.suit или This.face, и это дало мне обратную ошибку с просьбой вернуться (что, конечно же, не сработало)

эта текущая установка дает мне ошибку, говоря, что она не может преобразовать в void.

Я чувствую, что это так просто, но я новичок и только начал пробовать java около трех недель назад, так может кто-то помочь мне здесь? Я не просто хочу ответа, я хочу понять, почему это не работает.

4 ответа

Хорошо, здесь есть два вопроса: 1- Первая проблема не обязательно неправильная, но здесь она не нужна. Вы сделали свой метод возвратом Void, который понадобился бы в классе, который разрешает только методы, возвращающие только объекты или любой другой подобный сценарий. Хотя здесь пустоты было бы действительно достаточно.

2- void ничего не значит. Поэтому, если ваш тип возврата недействителен, вы не должны возвращать что-либо, на самом деле не имеет смысла вызывать метод setSuit, а затем попросить его вернуть значение, это как сказать своему другу, чтобы положить пищу в холодильник и ждать он даст вам еду. Теперь, если вы использовали «Пустоту», о которой я вам советовал, вам придется возвращать нуль, поскольку Void — это объект, поэтому он должен быть возвращен. Поскольку Void также не означает ничего, это не имело бы смысла для того, чтобы быть мгновенным (т.е. Вы не можете сделать это:

Таким образом, в этом случае вам нужно будет вернуть значение null (что ничего не значит). Теперь, если последняя часть не имеет смысла, она просто поместила void как возвращаемый тип, и вам нечего было бы возвращать.

Наконец, вы должны положить это, что вы сказали, что вставили, так как «это» сделает Java понятным, к какому лицу/кейсу вы относитесь, тем самым присваивая параметру лицом метода setFace/SetSuits параметр объекта face (this).

Вот модифицированная версия ваших методов:

хорошо, если кто-нибудь сталкивается с этим, я узнал трудный путь, но пустота должна использоваться. «Пустота» — это объект, и это то, что давало мне проблемы.

Как сказано пользователем6798995, проблема ниже кода

вы не можете вернуть что-то, если тип возврата недействителен

Поэтому они должны быть

Для основного метода вы можете сделать

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

Java — Хэлп. Java/ Пишу чат и не пойму в чем ошибка.

При возникновении связанных с Java проблем обращайтесь к следующим разделам.

Браузер Chrome версии 42 и более поздних. В браузере Chrome, начиная с версии 42 (выпущенной в апреле 2015 г.), отключен стандартный способ поддержки подключаемых модулей. Подробнее

Загрузка и установка Java

Используйте пакет для установки Java в автономном режиме (только для Windows)

Пакет для установки в автономном режиме часто успешно выполняется даже при возникновении проблем с интерактивным пакетом установки. Файл пакета установки в автономном режиме занимает много места и требует больше времени для загрузки в сравнении с интерактивным.
» Загрузка автономного установщика для Windows


Удалите все неработающие установки Java

Удалите предыдущие неработающие установки Java перед повторной попыткой установки.
» Удаление Java для Windows
» Удаление Java для Mac

Временно отключите межсетевой экран или клиенты антивируса

Активный межсетевой экран или антивирусные программы могут помешать корректной установке Java. Не забудьте снова включить межсетевой экран или антивирусную программу после успешного завершения установки Java.

Почему во время установки Java отображается сообщение о поврежденных файлах?

Это сообщение чаще всего отображается в Windows XP. Проблему можно устранить, выполнив утилиту Microsoft Fix it и воспользовавшись автономным установочным пакетом. Дополнительные сведения см. на странице Часто задаваемые вопросы об InstallShield.

Проверить установку Java можно с помощью инструкций в разделе Тест Java ниже.

Использование Java

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

Перезапустите браузер после установки Java, чтобы активировать новую версию

Если после установки последней версии Java все еще отображается запрос на обновление, перезапустите браузер. Закройте все окна браузера, затем откройте любую веб-страницу, для которой требуется Java. В большинстве случаев при запуске нового сеанса браузера должна быть активирована последняя установленная версия Java.
Примечание. Если по-прежнему отображается запрос на обновление, попробуйте перезагрузить компьютер. Перезагрузка компьютера может потребоваться для регистрации только что установленного подключаемого модуля Java.

Разрешение выполнить Java при выдаче запроса в браузере

Браузеры запрашивают разрешение пользователя выполнить подключаемый модуль Java в браузере. Текст сообщений может различаться в зависимости от браузера .
» Разрешение выполнения подключаемого модуля Java в браузере

Убедитесь, что в браузере включен подключаемый модуль Java

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

Убедитесь, что модуль Java разрешен в панели управления Java

Если модуль Java не разрешен в панели управления Java, запуск приложений Java в любом браузере будет невозможен.
» Разрешение содержимого Java в браузере с помощью панели управления Java

Настройте параметры защиты

Убедитесь, что уровень безопасности Java не мешает запуску приложения. Уровень безопасности по умолчанию может ограничить возможность запуска приложений, которые представляют собой риск для компьютера.
» Настройка параметров уровня безопасности в панели управления Java

Как выполнять приложения, заблокированные параметрами безопасности?

Начиная с версии Java 7 (обновление 51) добавлена функция Exception Site List. Добавив URL-адрес приложения в список исключений, пользователи могут выполнять RIA-приложения, которые обычно не проходят проверки системы безопасности.
» Настройка списка сайтов-исключений

Почему я не могу распечатать купоны или транспортные этикетки?

Некоторые приложения Java пока не соответствуют новым стандартам безопасности Java. В результате такие приложения блокируются, и печать становится невозможной. Свяжитесь с разработчиком веб-сайта или приложения и сообщите им о возникшей проблеме.
» Часто задаваемые вопросы о проблемах печати

Очистите кэш (временные файлы) Java

Иногда поврежденный файл в кэш-памяти Java может помешать запуску приложения. Вы можете удалить временные файлы, загруженные модулем Java, так как Java загрузит их обновленные версии повторно.
» Очистка кэш-памяти Java

Проверка параметров антивирусных программ и межсетевого экрана, связанных с Java

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

Проверьте настройки прокси-сервера

Проверьте правильность настроек прокси-сервера, если они необходимы для конфигурации сети Интернет.
» Настройка прокси-сервера с помощью панели управления Java

Удаление автономных установок JavaFX в Firefox (Windows)

Конфликт между Java версии 7u10 и выше, а также предыдущих автономных установок JavaFX может вызвать невозможность распознавания Firefox установленных версий Java.
» См. раздел неполадок Firefox


Тест Java

Убедитесь, что в браузере включена поддержка Java

Сразу после завершения установки Java вы можете проверить, включена ли в браузере поддержка Java. Возможно, выполнение Java было отключено или заблокировано в браузере. Шаги по разрешению выполнения Java зависят от используемого браузера.
» Проверка возможности выполнения Java в браузере

Удаление устаревших версий Java

Удалите все предыдущие версии Java, чтобы снизить угрозы безопасности

Использование установленных на компьютере предыдущих версий Java, поддержка которых прекращена, представляет собой серьезную угрозу безопасности. Удаление предыдущих версий Java позволит гарантировать запуск приложений Java с использованием новейших обновлений безопасности и производительности.
» Удаление предыдущих версий Java

Цукерберг рекомендует:  Постоянно пишите код!

Поиск Java

Варианты поиска установленных версий Java

» Используйте апплет Verify (Проверка) (рекомендуется)
» Если выполнить апплеты невозможно, определите версию Java вручную (Windows и Mac)

Чат на Java (Клиентская часть)

Всем доброго времени суток. На связи Алексей Гулынин. В данной статье я бы хотел написать клиентскую часть простого чата на Java. Все комментарии также будут даны в коде.

Скачать уже готовый проект полностью можно по ссылке.

Проект клиентской части будет состоять из 2 файлов:

  • ClientWindow.java — класс, который описывает логику работы клиента.
  • Main.java .

В классе Main будет просто создаваться экземпляр нашего клиентского приложения (формы):

Для проверки работоспособность программы сначала запускаем сервер. Далее можно запускать сколько угодно клиентских приложений. Результат работы программы при двух подключениях клиентов на скриншоте ниже:

В данной статье мы создали клиентскую часть простого чата на Java.

На связи был Алексей Гулынин, оставляйте свои комментарии, увидимся в следующих статьях.

Почему не запускается код на Java?

Пробую изучать программирование. Подскажите, почему код на java не запускается.

Читаю книгу Сьерра, Бейтс «Изучаем Java» и захотел уже опробовать код. Дочитал до 70-ой страницы, но пока все в теории и без запуска. В книге нет инструкции по установке и настройке Java, но знакомый подсказал создать переменные в свойствах системы.

public static void main(String[] args) <

В командной строке:

Error: Could not find or load main class HelloWorld

Файл с бинарным кодом HelloWorld.class на диске C появляется.

Java 7 64bit стоит в D:\Program Files\Java. Система Windows 7 64bit

Заранее спасибо за помощь!

P.S. Честно говоря, ожидал, что при изучении современных языков увижу среду разработки по типу Delphi, Visual Studio. А тут такой хардкорд в виде командной консоли.

  • Вопрос задан более трёх лет назад

  • 66480 просмотров

Я создал перед запуском такие переменные:
JAVA_HOME=D:\Program Files\Java\jdk1.7.0_25
> PATH=D:\Program Files\Java\jdk1.7.0_25\;D:\Program Files\Java\jdk1.7.0_25\LIB;D:\Program Files\Java\jdk1.7.0_25\BIN

без пробелов перед «;» и перезагрузил ПК.

Как я понимаю, в «CLASSPATH» нужно дописать и диск Ц (а лучше папку на нем создать и ее прописать), потому что он также содержит классы?

Как это все трудно понимать дизайнеру. В книге про настройку среды всего 1 предложение и то, вроде, команда Линукса. %(

Скопировал файл в D:\Program Files\Java\jdk1.7.0_25;D:\Program Files\Java\jdk1.7.0_25\LIB Запустился без ошибок. Потом создам на диске С каталог, чтобы далеко не бегать в командной строке, и добавлю в переменную.

Я думал, что здесь как в Фотошоп: есть привязка типа файлов и они запускаются из любого места. Меня очень удивило, что компилируется он без ошибок, но не запускается.

Добрый день. Специально зарегестрировался, чтобы описать решение этой проблемы.
Сам недели две назад тоже мучился и думал что я м.д.к, потому ничего не работает.

Это не совсем так, поэтому читайте ниже.

Суть проблемы:
При повторение видео урока, а точнее действий в нем, желаемый результат не выводился. Конкретнее была написана программа вывода сообщения Hellow World в консоли WIndows
А именно, компилированный ява файл, вызывался командой java ИМЯ.class, и выходила соответствующая ошибка: «could not find or load main class ИМЯ_класса»
т
Как решил:
Вызывать надо уже ОТКОМПИЛИРОВАННЫЙ файл командой[b][i] java ИМЯ [/i][/b]И все. Тогда консоль нормально воспроизводит программу, если, разумеется, в ней нет ошибок.
Возможно для гуру программирования, это очевидный ответ, и кажется что это норма, но я как 3-ью неделю изучающий яву, на второй день реально не понимал в чем суть проблемы. И так как несмотря на то что обучение идет трудно, мне было обидно и непонятно почему это не работает.

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

1) Скачать JDK c оф сайта (ссылку давать не буду, это точно найти сможете)
2) Установить скачанный пакет
3) Подключить установленную ява машину к нашей системе ( у меня это Windows 7)
а) зайти в папку с установленным пакетом и найти файл java.exe (у меня на Windows это было: C:\Program Files\Java\jdk1.8.0_05\bin\java.exe)
_______обращаю внимание, что находить именно файл java.exe не обязательно, просто я сделал так=)
б) Нажать на java.exe правой кнопкой мыши, выбрать «Свойства». В выскочевшем окошке, во вкладке «Общие», ищите строку «Расположение». Выделяйте и копируйте путь (у меня это C:\Program Files\Java\jdk1.8.0_05\bin)
в) Открываем пуск, наводим мышку на «Мой компьютер», жмем правую кнопку мыши, жмем «Свойства».
г) В открывшемся окне, слева, жмем кнопку «Дополнительный параметры системы»
д) В отрывшемся окне «Свойства системы», во вкладке «Дополнительно» (она по умолчанию выделена/открыта), внизу ищем кнопку «Переменные среды». Жмем на нее
е) В открывшемся окне «Переменные среды», в верхней его части, а именно «Переменная среды пользователя. » нажимаем кнопку создать
ж) В открывшемся окне вводим имя переменной, у меня это Path (можно ли другую, я не знаю), а в поле «Значение» вводим наш скопированный путь (C:\Program Files\Java\jdk1.8.0_05\bin)
д) Жмем «ОК», сохраняем все.
4) Проверяем нашу ява машину
а) Запускаем консоль (либо WIN + r => затем cmd и Enter либо Пуск => вводим в поиск над пуском cmd и жмем Enter)
б) В открывшейся консоли, вводим java
в) После этого должно появиться куча команд ява, служебная информция и прочее, если все нормально подключилось, если нет, то выдаст ошибку, вроде «Нет такой команды», или что-то похожее. Если что-то не так, делай действия выше по новой.
5)Если все ок, идем дальше. Создаем нашу простую программу на java.
6)Открываем блокнот, и пишем там код ниже:
[code=java]public class Hellow
<
public static void main(String[] args)
<
System.out.println(«Hellow World!»);

>
>
[/code]
Обращаю внимание, что тут частые ошибки, это не написан метод «main», и «println» ошибочно написано. Внимательно проверьте что напечатали сами. Если вы абсолютный новичек, то прежде чем будете понимать что происходит, должно пройти время, поэтому не умничайте, и проверяйте вплоть до каждой запятой.
7) Сохраняем наш файл. Вот тут обратите внимание на деталь: «В строке public class Hellow, слово Hellow, это имя класса, оно по сути, может быть почти любым, но очень важно, чтобы это имя совпадало с именем вашего файла, что вы сохраняете, причем если у вас он с большой буквы, значит и имя файла должно быть с большой. Сегодня я выяснил что в java вообще принято давать имена классов с большой буквы, так что не ленитесь, пишите с большой, но с маленькой, тоже не будет ошибкой, главное сохранить правило, какое имя класса, такое и имя файла.
Сохранять надо с расширением .java
В итоге, в нашем примере нужно сохранить файл в таком виде Hellow.java (вроде бы есть исключения, типо можно обозвать файл как хочу, но я не уверен, увы, но пока этого не знаю, так что делайте как выше написано, потом если узанете правду, напишите мне, благодарен буду)
8) На данном этапе, мы просто создали файл, который может откомпилировать программа, вторая ошибка, это желать сразу открыть этот файл и исполнить его. Деталей я не знаю, но суть в том, что современные Операционки и процессоры, не умеют это делать, не знаю почему, вроде что то там с процессом производства компьютеров, они вроде 4-битные, или наоброт не 4 битные, короче этот код просто так не запустить, его нужно откомпилировать, перевести в машинный язык, который можно запускать, для этого идем к след шагу
9)Запускаем консоль, в ней переходим в папку с нашим файлом Hellow.java
Обращаю внимание, так как я полный новичек, то как переходить в консоли, тоже понятия не имел, на всякий случай распишу минимум, который нужно знать
Чтобы зайти в каталог, нужно ввести команду cd ИМЯ_каталога. Например, нам нужно зайти в каталог/папку Desktop , вводим cd desktop. Разумеется, зайти мы туда сможем, только если эта папка находимся в том месте, где мы есть. Текущее местоположение отображается слева от вводимой команды в виде C:\Program Files\
Чтобы вернуться в корневую папку диска C нужно ввести cd \
Как-то можно подыматься на каталог выше, и прочие действия, но тут уже гуглите, у меня задача другая.
Команда dir показывает список всех папок в данном каталоге/папке
Если вы знаете точный путь к каталогу, можно из любого месте прописать полный путь в виде C:\Program Files\Java\. и вы туда попадете. В конце обязательно ставте \, а в начале диск C например. Иначе не сможете зайти.
Команад help выводит вроде базовый список возможных команд

Итого, алгоритм действий для попадания в нашу папку, где лежит файл Hellow.java
ввести cd \
потом dir
прочитать что там есть, зайти в нужную папку командой cd .
снова dir
и так далее
Разумеется нужно понимать самому, где находиться твой файл, например, путь для файла, сохраненного на рабочем столе будет таким c:\users\ИМЯПОЛЬЗОВАТЕЛЯ\desktop\
10) Теперь нам нужно откомпилировать файл Hellow.java. Для этого в консоли пишем javac Hellow.java
Если все ок, через пару секунд снова загорится поле ввода команды.
Если выскочила ошибка, как правило это какой либо косяк на этапе компиляции, читайте что там написано, там всегда пишут в чем была ошибка. Чаще всего это косяк в коде. Заходите в ваш файл и проверяйте внимательно строки. Чем чаще будете читать ошибки, тем быстрее научитесь их распозновать, Знание английского в 100500 раз облегчит работу.
11) Когда файл откомпилировался, он сохраняется в той же папке, что и основной (Hellow.java), принимая имя, вроде бы класса, это детали, я их увы, не знаю, но расширение станет уже .class В нашем случае это будет файл Hellow.class
12) Вот только теперь можно запускать этот файл, для проверки, что он у нас есть в папке, где мы находимся, в консоли вводим команду dir
видим наш файл, и вводим команду java Hellow
Причем обращаю внимание, не java Hellow.class , а именно java Hellow. Так как первый вариант выдаст ошибку, уж почему, извините, я не знаю.

Цукерберг рекомендует:  Css - Создаем чистильщик css, open source!

13) в консоли, на новой строке, выскочит сообщение Hellow World!
Все.

Вот собственно алгоритм запуска ява программ из консоил виндоус.
Я не претендую на полноту изложения, убер крутой и новый материал, просто я две недели сам мучился с этой проблемой, и писал код в среде разработчика IDEA. И мучался тем, что имея уже какое-то представление о Java, не мог запустить ее через консоль. Меня это мучило, поэтому когда я смотря очередную лекцию, увидел в чем была моя ошибка, меня осенило, и я решил свою проблемы, сняв камень с души, и как следствие, успокоившись. На радостях, я решил, что если в мире есть хотя бы еще один человек, которому эта информация может помочь, то пусть будет так.

Спасибо за внимание и заранее извините за ошибки. Если когда-нибудь надо будет, может быть я исправлю все недочеты своей короткой статьи, а пока держите, как есть.
Удачи в программировании!

Ошибка при установки Java! HELP.

Ошибка при установки Java! HELP.

Ошибка при установки Java! HELP
Устанавливаю я программу Java выдает :

Удаляю старyю версию выдает:

P.S. Не писать ответы типо:
«У меня таже хрень. «,»He знаю», «Плясать и бегать» и тп!

Был ответ:
FD
есть прога называеться Unlocker -все что угодно удалит, заходиш в C:\Program Files ишеш папку java удаляеш , если там выбьет удаление невозможно удалить папку при следующей запуске системы нажми ок, перегрузись, ана удалиться , удали из установки у удаление програм там этот ярлык, и ставь заново, тока реест прочисть CCleaner (Unlocker и CCleaner магу скинуть)

Мой на это ответ:
FD, дело в то что я так делал не помогло(

Основы работы с сетью на примере консольного чата

категория
Java
дата 25.12.2013
автор Vlad_Lastname
голосов 29

Теория — IP, порт, сокет

Если вы начали читать эту статью, то, скорее всего, имеете какое-то отношение к IT-и понимаете что такое IP-адрес – уникальный адрес, который определяет компьютер в сети.

Но достаточно ли такой адресации для полноценной работы? Предположим, что на некотором компьютере запущены одновременно две программы, которые взаимодействуют с интернетом – получают и/или отсылают какие-то данные. Программы никак между собой не связаны и общаются с разными интернет-сервисами. Но они расположены на одном компьютере, следовательно, имеют один IP-адрес. Если они одновременно должны получить данные от двух разных серверов, как же они определят, кому какие данные предназначались?

Для того, чтобы решить эту проблему, нужно вместе с самими данными передавать информацию о том, какой программе они предназначаются. Эта информация и есть порт.


В нашем случае каждая из программ (точнее, программисты, написавшие их) должна определить, по какому порту она хочет взаимодействовать с сетью. Сервер, в свою очередь, должен тоже знать этот порт и посылать данные именно на него.

Что же собой представляет этот загадочный порт? Вы можете взять отвёртку и перебрать весь компьютер, но портов так и не найдёте. Это просто число, которое передаётся вместе с данными. Теоретически, оно может находиться в диапазоне от 1 до 65535, но порты 1..1024 используются системными программами и занимать их не стоит. Поэтому порт следует выбирать из диапазона 1025..65535.

Итак, IP-адрес это адрес компьютера в сети; порт – «адрес» программы на этом компьютере. А сокет – это их объединение, т.е. адрес программы в сети. Именно сокеты мы и будем использовать, чтобы указать программе, куда же стоит отправлять сообщения.

Планируем

Даже в таких простых программах, как чат, не нужно сразу лезть в IDEи писать что-то невнятное. Для начала стоит осмыслить теорию, с которой мы ознакомились (вы же её не пропустили, правда?) и понять, что она значит в контексте нашей программы.

Во-первых, в проектах, которые предназначены для работы с сетью, нужны две программы (не будет же она одна слать сама себе сообщения). Одна из них является сервером, а другая – клиентом. Отсюда первое следствие:

  • Необходимо два режима работы программы – серверный и клиентский

При этом можно создать либо две разные программы, либо одну и спрашивать пользователя, в каком режиме её запустить. Первый способ лучше тем, что серверу не придётся хранить файлы для клиентской части. С другой стороны, так чтобы проверить работу сервера и клиента придётся качать и запускать две разные программы. Остановимся на втором способе – в одной программе в зависимости от желания пользователя, будем запускать серверный или клиентский режим.

Дальше самое время подумать об архитектуре. С двумя пользователями всё легко – они просто пересылают друг другу свои сообщения. Но как мы помним, чат у нас планируется многопользовательский. Хранить у каждого клиента список всех остальных пользователей бессмысленно (следует понимать, что в данном случае клиент и пользователь – одно и то же). Поэтому сделаем так:

  • Сервер будет один, а пользователей – любое количество. Каждый пользователь подключается к этому серверу и посылает ему свои сообщения. Сервер хранит список подключенных пользователей и рассылает им все полученные сообщения.

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

Раз пользователей будет много, неплохо бы их как-то идентифицировать. Для этого сразу после подключения клиент должен отправить серверу свой ник. Дальше клиент посылает сообщения в чат до тех пор, пока очередное сообщение не будет равно «exit». Это означает, что пользователь хочет покинуть чат и закрыть программу.

Написание программы

Теперь, когда все подготовительные момент ясны, можно преступить к самому интересному – написанию программы.

Файлы и структура пакетов

Вы, конечно, знаете, что любая программа на Javaначинается с метода main(String[] args). Для большей наглядности не будем добавлять его к другим классам, а создадим отдельный класс Mainи пакет для него – main. В любой программе наверняка будут какие-то константы. Я предпочитаю выносить их в отдельный файл в виде publicstaticполей, поэтому создам класс Constи также добавлю его в пакет main.

Как мы помним, программа должна работать в режиме клиента или сервера. Создадим два соответствующих класса Clientи Server.

В итоге дерево пакетов выглядит так:

Выбор режима работы

Для начала нужно выбрать, в каком режиме запускать программу – сервер или клиент. Это нам и нужно первым делом узнать у пользователя, поэтому в метод main(…) пишем следующее:

Здесь всё достаточно просто – спрашиваем, как запускать программу, считываем букву ответа и запускаем соответствующий класс. Стоит пояснить только по поводу класса Scanner – это класс стандартной библиотеки, который облегчает работу с вводом данных из консоли. Он инициализируется стандартным потоком ввода.

Режим клиента

Пойдём от простого к сложному и сначала реализует клиентский режим работы.

Если сервер просто запускается и ждём пользователей, то клиентам приходится проявлять некоторую активность, а именно – подключиться к серверу. Для этого нужно знать его IPи порт подключения. Порт является константой, поэтому зададим его в Const.java:

Constобъявлен как abstract, т.к. содержит только статические данные и создавать его экземпляр ни к чему.

IPдолжен ввести пользователь, поэтому в конструкторе Client пишем:

Теперь у нас есть все необходимые данные – ip, порт, режим работы программы. Можно подключаться к серверу. Сначала создадим сокет:

При этом сразу же производится подключение и можно передавать и считывать данные. Но как это сделать, если данные передаются только через потоки? Каждый Socketсодержит входной и выходной потоки класса InputStreamи OutputStream. Можно работать прямо с ними, но лучше для удобства «завернуть» их во что-то более функциональное:

Любые операции с потоками и сокетами должны выполняться внутри блока try..catch, для того, чтобы обрабатывать ошибки.


Вот теперь можно начать обмен сообщениями с сервером. Как мы помним, по протоколу, нужно сначала передать имя пользователя а затем каждое введённое (в консоль) сообщение отправлять серверу. Так и сделаем:

Метод println() объекта outотправляет данные на сервер, а метод readLine() объекта in– считывает полученные данные. Но как нам печатать в консоль полученные от сервера сообщения? Ведь нам нужно одновременно ожидать сообщений из консоли (от пользователя) и сообщений из потока (от сервера). Придётся для этого создать дополнительную нить.

Thread– класс Java, который реализует такую незаменимую вещь, как многопоточность. Это возможность программы одновременно выполнять разные наборы действий. Как раз то, что нам сейчас нужно.

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

До тех пор, пока поток не будет остановлен, он просто считывает все сообщения сервера и выводит их в консоль.

В конструкторе создадим объект этого класса и запустим поток:

Итоговый файл Client.java вместе с остальными приведён в конце статьи.

Режим сервера

Сервер, в отличие от клиента, работает не с классом Socket, а с ServerSocket. При создании его объекта программа никуда не подключается, а просто создаётся сервер на порту, переданном в конструктор.

Вся логика работы с конкретным пользователем будем находиться во внутреннем класса Connection, а Serverбудет только принимать новые подключения и оперировать существующими. Начнём «снизу» и создадим класс Connection, который должен в отдельной нити принимать от пользователя сообщения и рассылать их остальным клиентам:

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

Конструктор, как и в классе Client, преобразовывает потоки, связанные с сокетом. Метод run() запускается в отдельной нити и выполняется параллельно с остальной частью программы. В нём, согласно протоколу, сначала считывается имя пользователя, а потом все остальные его сообщения рассылаются всем клиентам чата. Когда приходит сообщение “exit”, пользователь отключается от чата, а все связанные с ним потоки закрываются методом close().

Теперь осталось только создать сервер, который будет принимать подключения, создавать объекты Connectionи добавлять их в массив. В конструкторе класса Server пишем:

Метод server.accept() указывает серверу ожидать подключения. Как только какой-то клиент подключится к серверу, метод вернёт объект Socket, связанный с этим подключением. Дальше создаётся объект Connection, инициализированный этим сокетом и добавляется в массив. Не забываем про try..catchи в конце закрываем все сокеты вместе с потоками методом closeAll();

Цукерберг рекомендует:  WebGL спиральный скроллинг

Исходники

Где-то на середине статьи я вдруг осознал, что худшего учителя найти сложно, поэтому вот вам хотя бы исходники с комментариями. Может там что-то будет понятно. Спойлеров что-то нету, так что лучше выложу на bitbucket.

Если Вам понравилась статья, проголосуйте за нее

Помогите пожалуйста с проблемой по изучению Java

Дискуссии /

Курилка

11 янв 2014 19:01

Добрый день, уважаемые участники форума.

Решил серьезно подойти к изучению языка программирования Java. Спросите вы для чего? Конкретной цели изучения нет, но я понимаю, что цель будет тогда, когда само понятие программирования для меня будет не таким сложным и не понятным как сейчас. Цель можно поставить совершенно любую, написать приложение или не большую игрушку, но эта не та цель, для которой я бы хотел изучить этот язык. Наверное при углублении изучения, цель появится сама собой, так же как и приобретаемый опыт. Очень надеюсь(

На данный момент уровень знания минимален, в силу того, что до этого я не изучал ни один яп. Главное все же это стремление и желание изучить . На данный момент прочел пол книги Java 7- The Complete Reference, это все хорошо, основы мне понятны, но существует одно «но». Весь код из книги, в частности из тех глав которые я прочел, я могу прочитать и понять как он работает, но как только дается задание, например придумайте программу, которая буде вести счетчик от 1 до 100, и каждые 2 числа, то есть 1, 3, 5, 7 и т.д. Будет писать определенную букву. Сложности в программе нет никакой, сделать счетчик с помощью цикла не сложно, но не сложно в уме. :( Как только дело доходит до практической части, я словно в ступоре, не знаю с чего начать, как продолжить и вообще такое ощущение, что сел в первый раз писать что либо. Хотя в голове основа программы уже составлена, то есть на словах рассказать легко. Не знаю что с этим делать и как это побороть. Любое самостоятельное задание превращается в пытку(( Создать класс, метод, написать реализацию метода, объявить переменные, построить цикл, ну ничего сложного нет, но почему же тогда у меня не получается это все сделать на бумаге? Такое ощущение что все вылетает из головы и сидишь не знаешь с чего начать и чем продолжить.
Прошу помощи, как перебороть подобный недуг. Буду рад любой помощи, критике. Изучаю яву около 3 часов в сутки, в основном читаю, так как самому писать сложно. Начал изучать примерно 2 недели назад.

Благодарю всех кто ответит, а так же выскажет свое мнение.

11 янв 2014 19:58

все ок. я Шилдта 4 раза уже читал (правда за 3 разом уже начал находить небольшие неточности в излагаемом материале). вам нужно время — это не велик, что сел и поехал. хотя может это просто не ваше :) и забывать материал вы будете быстрее, чем изучать новый материал — поэтому не тратьте время на это занятие, в мире есть много других не менее увлекательных вещей.

3 часа в сутки это ничто..смотрите, у меня например нет высшего технического и чтоб меня взяли на работу я должен быть на голову сильнее любого выпускника с дипломом (при прочих равных, логичнее взять тело с корочкой, чем просто васю с улици). весь прошлый год я усиленно изучал программирование — много читал, много писал кода. много это сколько, спросите вы ? для кого-то 3 в день часа это много, для кого-то и 16-ти мало (я вот записываю что прочитал, ну мало ли что, я то помню каждую книгу:) но вот с версиями могут быть несостыковки — так вот 52 книги за прошлый год у меня получилось, чуть больше 30 000 страничек + около 100 000 строк кода написано. и вот с этим багажом знаний я уже себя более-менее чувствую на собеседованиях, да и вообще в общении с матерыми кодерами. и это ток для старта так сказать:)

Ошибка выполнения в Java.

в Ошибки ПК 206 Просмотров

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


1,0,1,0,0

Обновить версию Java

Одной из распространенных причин ошибок времени выполнения включает в себя Java версия установленная на вашем компьютере или версия поддерживается Java апплетом. Например, если апплет поддерживает старые версии Internet Explorer и у вас последняя версия Internet Explorer установлена в вашей системе, апплет может не работать надлежащим образом, и вы увидите ошибку “ bad major version number ” . Этот тип ошибок Java работает в обе стороны. Если вы ещё не обновили вашу версию Internet Explorer в течение нескольких лет и при запуске Java-апплета, который был разработан с использованием новейших edition Java runtime environment, скорее всего вы получите ошибку времени выполнения.

3,1,0,0,0

Прекратить отображение java-кода

Много ошибок времени выполнения в Java, которые вы видите, будут ошибками в общении с кодом, и Вы не сможете ничего сделать, чем сказать компьютеру, чтобы он прекратил отображение отладочной информации об ошибках. Ведь вы не дизайнер аплетов, поэтому Вы не можете зайти и изменить код. Чтобы отключить отладку на вашем компьютере, что бы он перестал отображать ошибки Java runtime, зайдите в Internet Explorer и выберите в меню » Инструменты». Нажмите кнопку Параметры интернета. Перейдите на вкладку «Дополнительно » и прокрутите вниз для просмотра раздела. Снимите флажок напротив следующих пунктов:

  • Отключить отладку сценариев (Internet Explorer)
  • Отключить отладку сценариев (другие)

Далее, снимите галочку (если таковые имеются) в следующих пунктах:

5,0,0,1,0

Показывать уведомление о каждой ошибке сценария

Список возможных возникающих ошибок Java runtime может быть огромным, особенно если учесть все возможные ошибки программирования. Связанные с программированием ошибки могут быть проигнорированы отключив отладку скриптов в то время как появляются ошибки, связанные с несовместимостью между Java-апплетом и версией Java, которая у вас обычно установлена и решается путем обновления Java до последней версии. Конечно, если апплет требует старую версию Java, значит вам не повезло, если Вы не готовы понизить версию Java.

Включить Java

Одна заключительная вещь в ошибках Java, если вы знаете, какая версия Java у вас установлена, но апплеты не запускаются, вам может потребоваться включить Java. В Internet Explorer перейдите к инструменты > Sun Java Console. Это позволит поставить значок в системном трее. Правой кнопкой мыши щёлкните на значке Java и выберите открыть Панель управления. Теперь перейдите на вкладку Дополнительно и разверните опцию с названием по умолчанию Java для браузеров. Установите флажок рядом с вашим браузером.

Справка по Java: как исправить эту ошибку?

В моем классе мы работаем над java-программой, которая создает «карты» с номиналом и костюмом. Он использует два файла, один из которых является бегуном, а один — классом. Однако я был в шоке от серии ошибок в моем коде, которые я не могу понять, как избавиться.

Это мой код для класса карты:

Часть, которая дает мне проблемы, — setSuit() и setFace().

перед этим я пробую This.suit или This.face, и это дало мне обратную ошибку с просьбой вернуться (что, конечно же, не сработало)

эта текущая установка дает мне ошибку, говоря, что она не может преобразовать в void.

Я чувствую, что это так просто, но я новичок и только начал пробовать java около трех недель назад, так может кто-то помочь мне здесь? Я не просто хочу ответа, я хочу понять, почему это не работает.

4 ответа

Хорошо, здесь есть два вопроса: 1- Первая проблема не обязательно неправильная, но здесь она не нужна. Вы сделали свой метод возвратом Void, который понадобился бы в классе, который разрешает только методы, возвращающие только объекты или любой другой подобный сценарий. Хотя здесь пустоты было бы действительно достаточно.

2- void ничего не значит. Поэтому, если ваш тип возврата недействителен, вы не должны возвращать что-либо, на самом деле не имеет смысла вызывать метод setSuit, а затем попросить его вернуть значение, это как сказать своему другу, чтобы положить пищу в холодильник и ждать он даст вам еду. Теперь, если вы использовали «Пустоту», о которой я вам советовал, вам придется возвращать нуль, поскольку Void — это объект, поэтому он должен быть возвращен. Поскольку Void также не означает ничего, это не имело бы смысла для того, чтобы быть мгновенным (т.е. Вы не можете сделать это:

Таким образом, в этом случае вам нужно будет вернуть значение null (что ничего не значит). Теперь, если последняя часть не имеет смысла, она просто поместила void как возвращаемый тип, и вам нечего было бы возвращать.

Наконец, вы должны положить это, что вы сказали, что вставили, так как «это» сделает Java понятным, к какому лицу/кейсу вы относитесь, тем самым присваивая параметру лицом метода setFace/SetSuits параметр объекта face (this).

Вот модифицированная версия ваших методов:

хорошо, если кто-нибудь сталкивается с этим, я узнал трудный путь, но пустота должна использоваться. «Пустота» — это объект, и это то, что давало мне проблемы.

Как сказано пользователем6798995, проблема ниже кода

вы не можете вернуть что-то, если тип возврата недействителен

Поэтому они должны быть

Для основного метода вы можете сделать

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

Понравилась статья? Поделиться с друзьями:
Все языки программирования для начинающих