我的服务器是围绕支持更新侦听套接字而构建的,这样做我使用以下方法。我的问题发生在第二次调用此方法后,首先在 main 方法启动时调用它,然后通过单击 JFrame 中的按钮调用它。发生的情况是,当通过按钮调用此方法时 JFrame 冻结,正如您从代码中看到的那样,我试图使此方法在新线程中运行服务器,但它并没有改变我的结果。有谁知道如何解决这一问题?或者至少是什么原因造成的?在 main 中调用该方法之后的任何代码也不会执行,所以我相信这是一个线程问题。(MiniServer 扩展了 Thread 并用于单独处理每个连接的客户端)
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();
}