繁体   English   中英

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

[英]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()的方法说明:

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

在没有数据输入套接字之前,您的程序将冻结。 如果还有其他问题,请检查您的日志。 可能还有另一个问题。

您的程序被冻结,因为您正在阻止UI线程。 您需要将此发布到单独的线程上:

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

    }).start();
}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM