1

私のサーバーは、リスニングソケットを更新するためのサポートを中心に構築されているため、次の方法を使用します。私の問題は、このメソッドが 2 回目に呼び出された後に発生します。これは最初にメイン メソッドから起動時に呼び出され、その後 JFrame のボタンをクリックして呼び出されます。このメソッドがボタンを介して呼び出されると、JFrame がフリーズします。このメソッドに新しいスレッドでサーバーを実行させようとしたコードからわかるように、結果は変わりません。これを修正する方法を知っている人はいますか?または少なくとも何が原因ですか?また、メインでメソッドが呼び出された後のコードは実行されないため、スレッドの問題だと思います。(MiniServer はスレッドを拡張し、接続された各クライアントを個別に処理するために使用されます)

public static void startListening(final int port)
{
    listeningThread = new Thread() 
    { 
        public void run()
        {               
            try {
                serverSocket = new ServerSocket(port);

                while(!stop)
                {
                    boolean loop = true;
                    while (loop)
                    {
                        serverSocket.setSoTimeout(1000);

                        try{
                            clientSocket = serverSocket.accept();
                            loop = false;
                        } catch (SocketTimeoutException e){
                        }
                    }
                    if(!clientSocket.equals(null))
                    {
                        MiniServer mini = new MiniServer(clientSocket);
                        mini.start();
                        clientSocket = null;
                    }
                }
            } catch (IOException e) {
            }
        } 
    };
    listeningThread.run();
}
4

1 に答える 1