Все, что я хочу сделать, это начать поток, чтобы прослушивать связь на определенном порту.Простая проблема с потоком
Я начинаю это с кнопки «ok» на jDialog. Когда щелкнули «ok», jDialog должен скрыть себя (HostClientDialog.setVisible (false),), который работает, когда строка начала потока отсутствует.
try {
HostClientDialog.setVisible(false);
// start a thread that listens for incoming messages
new gameCycle().start();
} catch (Exception e) { }
новый товарCycle(). Start(); линия звонит следующий код:
public class gameCycle extends Thread {
//public gameCycle(){
// super();
//}
@Override
public void run() {
try {
ServerSocket connection = new ServerSocket(4242);
// Wait for connection
Socket s = connection.accept();
// Socket input
BufferedReader in = new BufferedReader(new
InputStreamReader(s.getInputStream()));
// for receiving moves
while (true) {
String message = "";
message = in.readLine();
if (message != null && !message.equals("")) {
// do something with message
}
sleep(100);
} // end while
} catch (Exception e) { }
} // end run
} // end class
я понял, приведенный выше код будет выполняться цикл, пока не будет получено сообщение, а затем что-то делать с сообщением. Но когда вы выполняете этот код, поле jDialog выполняется снова (мгновенно) и повторно запрашивает пользователя, чтобы щелкнуть ok. Он не позволит пользователю пройти окно jDialog, он будет просто постоянно запрашивать их.
Я довольно новичок с потоками (я не делал много больше, чем печатание с использованием нескольких потоков), поэтому я чувствую, что, может быть, я неправильно его внедряю. Но я искал примеры, и они, похоже, более или менее то, что у меня есть.
EDIT (11/29/2010 в 1:30 AM EST)
Кажется, что я не достаточно иметь представление о TCP связи вниз так, как я думал. Моя цель с нитью и последующее время цикла был следующим:
- На заднем плане программа будет будет ждать каких-либо сообщений, отправленного его пути
- Если он получил сообщение, что будет обновлять что-то на GUI, а затем вернуться к ожиданию дополнительных сообщений.
Все это время позволяет пользователю постоянно использовать графический интерфейс пользователя.
Отмечено. Так что я должен помещать объявления Socket и BufferedReader в цикл while так, чтобы их переделывали каждый раз? – Ryan 2010-11-29 05:36:37
Конечно нет. Не знаю, как вы это поняли из того, что я сказал. Вы не можете сделать это в случае сокета, и если вы сделаете это с помощью BufferedReader, вы потеряете данные. – EJP 2010-11-29 05:51:03
Я не знал, как соединение останется неповрежденным, если я закрываю сокет в нижней части цикла while. Если я закрою сокет в нижней части цикла while, линия in.readLine() снова откроет соединение? – Ryan 2010-11-29 05:57:16