2012-01-15 2 views
2

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

создать в конструкторе моего GUI:

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

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

+0

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

+2

@Mazzy с тем же предложением, что и в вашем последнем вопросе, используйте SwingWokrer – mKorbel

+1

Точно - вы должны уже знаю ответ на этот вопрос! –

ответ

3

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

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

Таким образом, GUI будет реагировать.

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

UPDATE:

Ваш код здесь не так.

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

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

3

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

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

+0

+1 для предложения каротажа. Недавно я использовал приложение log4j, которое могло выводить сообщения журнала в текстовой области. Вы хотите что-то подобное здесь. Ваше приложение должно иметь возможность запускать без пользовательского интерфейса, а при необходимости или желании показывать пользовательский интерфейс с сообщениями. Хотя простой «хвост» на консоли будет таким же эффективным – Robin

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