код после оператора сокета не выполняется - PullRequest
0 голосов
/ 09 февраля 2011


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

Conection_Manager cm = new Conection_Manager(jTextField1.getText());
jTextArea1.setText(cm.getMessage());

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

Ответы [ 2 ]

0 голосов
/ 10 февраля 2011

Я предполагаю, что под сбой вы имеете в виду, что он зависает. Это потому, что вы пытались выполнить длительные операции в так называемом потоке диспетчеризации событий , который обрабатывает все события Swing. Ваше решение по созданию нового потока для подключения через сокет является правильным, но вместо того, чтобы ждать завершения потока (снова блокируя EDT), вам необходимо обновить графический интерфейс из порожденного потока.

Но будьте осторожны, это сложно, поскольку Swing, как правило, не является поточно-ориентированным, что означает, что вы не можете просто обновить элементы управления из других потоков. Попробуйте SwingWorker и убедитесь, что вы читаете о EDT, например: http://java.sun.com/developer/technicalArticles/Threads/swing.

0 голосов
/ 10 февраля 2011

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

Кроме того, серверные сокеты блокируются до получения соединения, если вы делаете все в одном потоке (например, без исполнителя)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...