2016-07-13 8 views
0

私は以下のセットアップをしています:まずメインフレームとしてSwiftを持つGUIがあります。次に、ボタンを押して新しいスレッドを開始したいと思います。ボタンをもう一度押すと、スレッドが停止するはずです。スレッドは、TCP-接続をincommingのを待っている:着信を待つJavaでスレッドを中断する方法

ServerSocket clientSocket = welcomeSocket.accept(); 

は今、私はスレッドを停止するGUI thread.interrupt();に呼び出そうとしましたが、それは原因.acceptを働いていないブロッキングシステムコールです。新しい接続を待ってスレッドを停止するにはどうすればよいですか?私はthread.stop()を使用したくないのですが、廃止予定です。

すべての解決策はありますか?

答えて

0

setSoTimeout(1000)を使用すると、何も接続されていなければaccept()の呼び出しを1秒後にタイムアウトさせることができます(java.net.SocketTimeoutExceptionをスローする)。ループ内のスレッド信号を確認するには、次のようにします。

try (ServerSocket serverSocket = new ServerSocket(8080)) { 
    serverSocket.setSoTimeout(1000); 
    //active is a volatile boolean manipulated by the control thread 
    while (active) { 
     try { 
      Socket s = serverSocket.accept(); 
      somebodyConnected(s); //do something important here 
     catch (java.net.SocketTimeoutException) {} //expected 
    } 
    System.out.println("exiting"); 
} //the try-with-resources ensures the ServerSocket is gracefully closed 
関連する問題