2012-03-16 2 views
0

소켓 TCP/IP 및 GUI를 사용하는 Java 응용 프로그램이 있습니다. 서버는 항상 연결을 수신하고 클라이언트로부터 메시지를받습니다. 서버가 메시지를 받으면 스윙 양식을 표시합니다. 닫기 버튼을 클릭하면 응용 프로그램이 멈 춥니 다. 서버 소켓은 항상 연결을 청취합니다 (while(true) 루프에 메서드 serverSocket.accept() 넣기). 어떻게 그 문제를 해결할 수 있습니까? 그것은 "을 System.exit을 (호출하는 공용 클래스 tcpserver는 {네트워크 스레드 및 스윙 스레드 문제

ServerSocket server = null; 
BufferedReader in; 
PrintWriter out; 
Socket client = null; 

//open serverSocket 
public void openServer() { 
    try { 
     server = new ServerSocket(1234); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

//accept connection and read data 
public void listening() { 
    try { 

     while (true) { 
      client = server.accept(); 
      in = new BufferedReader(new InputStreamReader(client.getInputStream())); 
      out = new PrintWriter(client.getOutputStream(), true); 
      //read data from stream 
      String s = in.readLine(); 
      System.out.println("String receive: " + s); 

      new NewJFrame().setVisible(true); 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

public void closeServer() { 
    try { 
     if (out != null) { 
      out.close(); 
     } 

     if (in != null) { 
      in.close(); 
     } 
     if (client != null) { 
      client.close(); 
     } 
     if (server != null) { 
      server.close(); 
     } 
    } catch (Exception e) { 
    } 
} 

public static void main(String arg[]) { 
    TCPServer server = new TCPServer(); 
    server.openServer(); 
    server.listening(); 
    server.closeServer(); 
} 

}

+0

가 – Blitzkr1eg

+0

당신은 미국 NewJFrame 코드를 보여줄 수 close 이벤트를 처리하는 코드를 보여주지 전체 응용 프로그램, 배치 확신 setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);

이 방법 :

하여 교체? 닫기 버튼을 눌렀을 때'System.Exit'을하지 않으실 건가요? 스택 트레이스를 얻었습니까? – GETah

+0

닫기 버튼이 창에 있습니다. 그리고 set : setDefaultCloseOperation (javax.swing.WindowConstants.EXIT_ON_CLOSE); – PhiVH

답변

4

:

 EXIT_ON_CLOSE 
     The exit application default window close operation. 

NewJFrame 클래스,이 제거 : setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

닫기 버튼이 명중 할 때이 전체 응용 프로그램 종료를하고있다! 당신은 단지 윈도우

+0

아, 답변 해 주셔서 감사합니다. 지금, 당신의 아이디어는 훌륭합니다. 나는 내 문제를 해결했다. – PhiVH

+0

@PhiVH 문제를 해결 한 경우 답장으로 표시하십시오 :) – GETah

+0

@PhiVH, 답변으로 문제가 해결되면 "확인 표시"를 클릭하여 대답을 수락해야합니다. 즉 스택 오버플로가 작동하는 방식입니다. –

1

우리가 추측 할 수 귀하의 대화가"CLOSE_ON_EXIT "옵션 하다며 설정했는지 : 여기

은 서버에 내 코드입니다) "직접?

아니요. 자세한 정보를 제공하십시오. Javadoc에서

+0

GETah가 내 질문에 대답했고 내 문제를 해결했습니다. – PhiVH