在Java中调用Server方法时程序冻结

时间:2015-04-09 21:11:40

标签: java server

我在GUI中有一个基本Java,其中有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);
    }   
}

2 个答案:

答案 0 :(得分:0)

以下是ServerSocket.accept()的方法说明:

  

侦听与此套接字的连接并接受它。该   方法阻塞,直到建立连接。

在插入数据之前,您的程序将冻结。如果是另一个问题,请检查您的日志。可能还有另一个问题。

答案 1 :(得分:0)

您的程序正在冻结,因为您正在阻止UI线程。您需要在单独的帖子上发布此内容:

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

    }).start();
}

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