1
私はクライアント< - >サーバーアプリケーションを持っています。問題は、「終了」ボタンをクリックしてスレッド全体を強制終了しない場合です。プロセスは終了しますが、スレッドはまだアクティブのままです。しかし、 "X"ボタンをクリックすると、JOptionPane.showConfirmDialogはすべてを停止しているので、ボタンを同じ(終了させる)したいと思います。whileループが実行されてもJavaスレッドが停止しない
P.P. enter image description here
これは私が「X」ボタンをクリックしたときに何が起こるかです:「終了」ボタンが切断()
@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();
}
}
} これは私が[終了]ボタンをクリックしたときに何が起こるかを呼び出しているJSwingWorkerを開始しますon JFrame(終了): enter image description here
ここでserverClosedByButtonが宣言されていますか? –
Swingを使用するときは、終了するためにVMを終了する必要があります。たとえば、 'System.exit(0);'を使用します。 –
ΦXocen笑Пepeúpaツ全体のコードは300行の長さ、私はneccessery何を掲示した:)彼らは宣言されている非公開です。ループから抜け出しますが、終了しません。私は今System.exitを試してみる –