создать серверное приложение с графическим интерфейсом - PullRequest
2 голосов
/ 15 января 2012

Мне нужно создать приложение с графическим интерфейсом.мое приложение должно работать как сервер.Когда он запускается, он должен принять все входящее соединение и записать вывод в JTextArea.моя проблема в том, где я должен создать ServerSocket ss = new ServerSocket(port_number) и метод ss.accept так, чтобы я мог принимать соединения.Я пытался создать в главном конструкторе моего графического интерфейса, но, будучи ServerSocket и I/O запросить графический интерфейс пользователя Stucks.some для решения проблемы?

Я создаю в конструкторе моего графического интерфейса:

SwingUtilities.invokeLater(new Runnable(){public void run(){connection();}});

, где connection() - метод, в котором я создаю серверный сокет и принимаю вызов

Ответы [ 2 ]

3 голосов
/ 15 января 2012

Логика ввода-вывода должна быть (как минимум в одном) отдельном фоновом потоке. Каждый раз, когда что-то должно быть напечатано в текстовой области из одного из этих фоновых потоков, они должны делать это, используя SwingUtilities.invokeLater(), чтобы гарантировать, что компоненты Swing доступны только из потока диспетчеризации событий.

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

3 голосов
/ 15 января 2012

Вы должны создать отдельный поток для ожидания / обработки сетевых подключений.

Когда приходит новое соединение, прочитайте данные и передайте их в EDT для обновления GUI.

Таким образом, графический интерфейс будет отзывчивым.

Вы должны прочитать о MVC Pattern темах.Если в Google есть множество статей для изучения

ОБНОВЛЕНИЕ:

Ваш код здесь неверный.

SwingUtilities.invokeLater(new Runnable(){public void run(){connection();}});

Вы обрабатываете соединение из потока EDT.
Это следует использовать для обновления графического интерфейса пользователя, а не для вызова кода сетевого ввода-вывода.

...