Прослушивание соединений в отдельном потоке - PullRequest
0 голосов
/ 03 августа 2011

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

java.awt.EventQueue.invokeLater(new Runnable() {
                @Override
                public void run() {
                    try {
                        while(true){
                            System.out.println("flag1");
                            Socket socket = listeningSocket.accept();
                            System.out.println("flag2");
                            new Chat(socket).setVisible(true);;
                            jTextArea1.append("successfully connected\n");
                        }
                    } catch (NullPointerException e) {
                        System.out.println("i know");
                    }
                    catch (IOException e) {
                        e.printStackTrace();
                        jTextArea1.append("error in recieving connection\n");
                    }
                }
            });

есть идеи как это решить?

Ответы [ 2 ]

3 голосов
/ 03 августа 2011

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

Появляется как?accept () блокирует только текущий поток.Вы называете это в ветке AWT?например, метод actionPerformed ()?Не выполняйте никаких сетевых операций в этих методах, используйте отдельные потоки.

1 голос
/ 03 августа 2011

Socket.accept () блокирует текущий поток.Вы увидите «flag2» напечатанным только после получения соединения.Но он блокирует только ТЕКУЩИЙ поток.

Я подозреваю, что вы не запускаете отдельный поток правильно (вы вызываете yourThreadHere.start (), а не .run (), верно?).

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