2017-08-18 20 views
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

+0

ここでserverClosedByButtonが宣言されていますか? –

+0

Swingを使用するときは、終了するためにVMを終了する必要があります。たとえば、 'System.exit(0);'を使用します。 –

+0

ΦXocen笑Пepeúpaツ全体のコードは300行の長さ、私はneccessery何を掲示した:)彼らは宣言されている非公開です。ループから抜け出しますが、終了しません。私は今System.exitを試してみる –

答えて

1

スウィングを使用する場合、終了するにはVMを終了する必要があります。例えば、System.exit(0);

関連する問題