在 Java 中调用服务器方法时程序冻结

Program freeze when calling Server method in Java

我在 Java 中有一个基本的 GUI,其中有一个 JButton,我提供了使用该按钮启动 Server 的功能。但是当我点击按钮时,程序冻结了。是因为while loop吗?如果是这样,我该如何克服这个问题?

Server Code

 void connect_clients()
{
    try {
        ServerSocket listener = new ServerSocket(7700);
        try {
            while (true) {
                Socket socket = listener.accept();
                try {
                    PrintWriter out =
                            new PrintWriter(socket.getOutputStream(), true);
                    out.println(new Date().toString());
                }

                finally {
                    socket.close();
                }
            }
        }
        finally {
            listener.close();
        }
    }
    catch (IOException ex) {
        Logger.getLogger(Test_Frame.class.getName()).log(Level.SEVERE, null, ex);
    }   
}

这里是ServerSocket.accept()的方法说明:

Listens for a connection to be made to this socket and accepts it. The method blocks until a connection is made.

在有数据输入到套接字之前,您的程序将停止运行。如果是另一个问题,请检查您的日志。可能还有其他问题。

您的程序正在冻结,因为您阻塞了 UI 线程。您需要 post 在单独的线程上进行此操作:

public void postListen()
{
    new Thread(new Runnable()
    {
        public void run()
        {
            connect_clients();
        }

    }).start();
}

改为调用该方法,它应该 运行 单独线程上的 connect_clients() 方法。新线程将阻塞,直到客户端连接。