Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
程序在ServerSocket.accept-Java上没有响应_Java_Sockets_Interrupt_Freeze - Fatal编程技术网

程序在ServerSocket.accept-Java上没有响应

程序在ServerSocket.accept-Java上没有响应,java,sockets,interrupt,freeze,Java,Sockets,Interrupt,Freeze,我的程序只监听一次连接。。。如果没有客户机连接,程序就会卡在clientSocket=serverSocket.accept()上。我的意思是我甚至不能关上窗户来打断它。我无法单击框架中的任何按钮等 我在我的其他程序中也以同样的方式使用了这段代码,但它工作得很好(我可以单击文本字段和按钮,填充并在其中键入值,对于这段代码,它只是冻结在那里,直到客户端连接,甚至无法退出) 我已经删除了除此之外的所有代码(如下),但我仍然遇到相同的“冻结”问题 setTitle(title); se

我的程序只监听一次连接。。。如果没有客户机连接,程序就会卡在clientSocket=serverSocket.accept()上。我的意思是我甚至不能关上窗户来打断它。我无法单击框架中的任何按钮等

我在我的其他程序中也以同样的方式使用了这段代码,但它工作得很好(我可以单击文本字段和按钮,填充并在其中键入值,对于这段代码,它只是冻结在那里,直到客户端连接,甚至无法退出)

我已经删除了除此之外的所有代码(如下),但我仍然遇到相同的“冻结”问题

    setTitle(title);
    setSize(sizeW, sizeH);
    setVisible(visibility);
    setResizable(resizability);
    setLocationRelativeTo(null);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    addKeyListener(new MyKeyAdapter());
    addMouseListener(new MyMouseAdapter());

    //Container
    c = getContentPane();
    c.setLayout(new BorderLayout());

听起来您正在对GUI的事件调度线程(EDT)执行
serverSocket.accept()
调用。Swing依赖于EDT来呈现和处理用户交互-如果您执行诸如“accept”之类的阻塞调用,您将不会在GUI上看到任何更新


您需要做的是创建一个新线程(或者使用应用程序的“主”线程,这与EDT不同),该线程位于accept上,等待客户端连接。连接后,它可以执行任何需要的工作,但是当您想要更新GUI时,您需要将执行更新的代码包装在一个
Runnable
中,并通过
SwingUtilities将其传递给EDT。invokeLater

在您的代码中,您在哪里调用“runServer”?谢谢,我明白您的意思了。我在另一个线程中运行了它,它可以正常工作。
    setTitle(title);
    setSize(sizeW, sizeH);
    setVisible(visibility);
    setResizable(resizability);
    setLocationRelativeTo(null);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    addKeyListener(new MyKeyAdapter());
    addMouseListener(new MyMouseAdapter());

    //Container
    c = getContentPane();
    c.setLayout(new BorderLayout());