Java 即使 while 循环完成,线程也不会停止
Java thread not stopping even when while loop is done
我有一个客户端 <-> 服务器应用程序。问题是当我单击按钮 "Exit" 时,它不会终止整个线程。它终止了进程,但线程仍然保持活动状态。但是,如果我单击 "X" 按钮,JOptionPane.showConfirmDialog 将停止所有操作,因此我希望该按钮执行相同的操作(终止)。
P.P。 "Exit" 按钮启动一个正在调用 disconnect()
的 JSwingWorker
@Override
public void run() {
synchronized (this) {
while (!serverDownAfterTry && !serverClosedByButton) {
multicastSocket = connectToMulticastAddress(multicastIP);
mediator = new Mediator(multicastSocket, this, objectOutput, userName);
mediator.setSocketIP(clientSocket.getInetAddress().toString());
mediator.setSocketPort(clientSocket.getPort());
String input = "";
if (connected) {
mediator.writeOnMulticastAddress("USER_CONNECTED " + this.userName);
mediator.executeCommands("SYSTEM_MESSAGE " + this.userName, clientGUI);
input = mediator.listenToMultiCast(multicastSocket);
}
while (!multicastSocket.isClosed()) {
input = mediator.listenToMultiCast(multicastSocket);
if (input != null) {
mediator.executeCommands(input, clientGUI);
}
}
}
}
}
public void disconnect() {
clientGUI.dispose();
serverClosedByButton = true;
multicastSocket.close();
try {
objectOutput.close();
clientSocket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
这是当我单击退出按钮时发生的情况:
enter image description here
这是我在 JFrame 上单击 "X" 按钮时发生的情况(已终止):
enter image description here
当您使用Swing 时,您需要终止您的VM 才能退出。例如通过使用 System.exit(0);
我有一个客户端 <-> 服务器应用程序。问题是当我单击按钮 "Exit" 时,它不会终止整个线程。它终止了进程,但线程仍然保持活动状态。但是,如果我单击 "X" 按钮,JOptionPane.showConfirmDialog 将停止所有操作,因此我希望该按钮执行相同的操作(终止)。
P.P。 "Exit" 按钮启动一个正在调用 disconnect()
的 JSwingWorker@Override
public void run() {
synchronized (this) {
while (!serverDownAfterTry && !serverClosedByButton) {
multicastSocket = connectToMulticastAddress(multicastIP);
mediator = new Mediator(multicastSocket, this, objectOutput, userName);
mediator.setSocketIP(clientSocket.getInetAddress().toString());
mediator.setSocketPort(clientSocket.getPort());
String input = "";
if (connected) {
mediator.writeOnMulticastAddress("USER_CONNECTED " + this.userName);
mediator.executeCommands("SYSTEM_MESSAGE " + this.userName, clientGUI);
input = mediator.listenToMultiCast(multicastSocket);
}
while (!multicastSocket.isClosed()) {
input = mediator.listenToMultiCast(multicastSocket);
if (input != null) {
mediator.executeCommands(input, clientGUI);
}
}
}
}
}
public void disconnect() {
clientGUI.dispose();
serverClosedByButton = true;
multicastSocket.close();
try {
objectOutput.close();
clientSocket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} 这是当我单击退出按钮时发生的情况: enter image description here
这是我在 JFrame 上单击 "X" 按钮时发生的情况(已终止): enter image description here
当您使用Swing 时,您需要终止您的VM 才能退出。例如通过使用 System.exit(0);