私のサーバーは、リスニングソケットを更新するためのサポートを中心に構築されているため、次の方法を使用します。私の問題は、このメソッドが 2 回目に呼び出された後に発生します。これは最初にメイン メソッドから起動時に呼び出され、その後 JFrame のボタンをクリックして呼び出されます。このメソッドがボタンを介して呼び出されると、JFrame がフリーズします。このメソッドに新しいスレッドでサーバーを実行させようとしたコードからわかるように、結果は変わりません。これを修正する方法を知っている人はいますか?または少なくとも何が原因ですか?また、メインでメソッドが呼び出された後のコードは実行されないため、スレッドの問題だと思います。(MiniServer はスレッドを拡張し、接続された各クライアントを個別に処理するために使用されます)
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();
}