2012-03-12 9 views
0

ここではコードです:、正常に終了するかクラッシュするたびにプログラムがソケットを閉じるのを確認するにはどうすればよいですか?

public class MyConsoleIO implements Runnable { 

    SocketWorker o; 
    static BufferedReader reader; 

    public void assignObject(Object o) { 

     reader = new BufferedReader(new InputStreamReader(System.in)); 

     this.o = (SocketWorker) o; 

    } 

    @Override 
    public void run() { 
     String inputString = null; 

     System.out.println("Press 'q' to kill to program"); 
     try { 
      inputString = reader.readLine(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     if (inputString.equalsIgnoreCase("q")) { 
      this.applicationQuit(); 
     } 
    } 

    public void applicationQuit(){ 
     this.o.stopWorking(); 
     System.exit(0); 
    } 

} 

public static void main(String[] args) { 
    SocketWorker worker = null; 
    MyIOConsole mio = null; 

    try { 
     portNumber = 2012; 

     worker = new SocketWorker();  
     worker.assignPort(portNumber); 

     mio = new MyIOConsole(); 
     mio.assignObject(worker); 

     Thread b = new Thread(mio); 
     b.start(); 

     worker.run(); 

    } catch (IOException e) { 
     e.printStackTrace(); 
    }finally{ 
     mio.applicationQuit(); 
    } 
} 

SocketWorkerは、ユーザコマンドを受け入れる、MyIOConsoleポート2012をリッスンし、単にソケットで、しかし、ソケットが例外を得たとき、私もそれらをキャッチして、コード

 mio.applicationQuit(); 

を実行してください。私はそれを望んでいない、私はちょうどユーザーがアプリケーションを閉じたり、クラッシュしたときに、ソケットが閉じて終了したい。どうすれば解決できますか?

+0

問題を明確にするためにSocketWorkerコードを追加してください – clevertension

答えて

2

以下を追加してください。 runメソッドは、JVMが終了するときに呼び出されます。

Runtime.getRuntime().addShutdownHook(new Thread() { 
    public void run(){ 
     // cleanup code before JVM exit goes here. 
    } 
}); 
関連する問題