2016-09-27 7 views
0

내 GUI에서 중지 버튼을 누르면 서버를 닫고 싶습니다. 연결을 청취 할 때 소켓을 닫는 방법

public void run() { 
     while (running) { 
      try { 
       if (serverSocketPassed) { 
        socket = serverSocket.accept(); 
        scanner = new Scanner(socket.getInputStream()); 
        stream = new PrintStream(socket.getOutputStream()); 
       } 
      } catch (IOException e) { 
       System.out.println("err11"); 
       e.printStackTrace(); 
      } 
     } 

    } 

그리고

닫는 부분에 대한 코드는 다음과 같습니다 : 나는 클라이언트가 ServerSocket를 연결하는 경우 수신 대기 소켓,이 코드를 사용

public void stop() { 
    try { 
      serverSocket.close(); 
      running = false; 
     } catch (Exception e) { 
      System.out.println("Err"); 
      e.printStackTrace(); 
     } 
     scanner.close(); 
     stream.close(); 
} 

을하지만이 나는 정지를 호출 할 때 함수, 연결하기 전에 클라이언트 : 나는 오류가 발생합니다. 오류 :

err11 
java.net.SocketException: socket closed 
    at java.net.DualStackPlainSocketImpl.accept0(Native Method) 
    at java.net.DualStackPlainSocketImpl.socketAccept(Unknown Source) 
    at java.net.AbstractPlainSocketImpl.accept(Unknown Source) 
    at java.net.PlainSocketImpl.accept(Unknown Source) 
    at java.net.ServerSocket.implAccept(Unknown Source) 
    at java.net.ServerSocket.accept(Unknown Source) 
    at _47b3n.server.main.Server$SocketRunner.run(Server.java:93) 
    at java.lang.Thread.run(Unknown Source) 
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 
    at _47b3n.server.main.Server.stop(Server.java:42) 
    at _47b3n.server.main.ServerGUI$ActionListener.actionPerformed(ServerGUI.java:166) 
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source) 
    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source) 
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source) 
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source) 
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source) 
    at java.awt.Component.processMouseEvent(Unknown Source) 
    at javax.swing.JComponent.processMouseEvent(Unknown Source) 
    at java.awt.Component.processEvent(Unknown Source) 
    at java.awt.Container.processEvent(Unknown Source) 
    at java.awt.Component.dispatchEventImpl(Unknown Source) 
    at java.awt.Container.dispatchEventImpl(Unknown Source) 
    at java.awt.Component.dispatchEvent(Unknown Source) 
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source) 
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source) 
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source) 
    at java.awt.Container.dispatchEventImpl(Unknown Source) 
    at java.awt.Window.dispatchEventImpl(Unknown Source) 
    at java.awt.Component.dispatchEvent(Unknown Source) 
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source) 
    at java.awt.EventQueue.access$500(Unknown Source) 
    at java.awt.EventQueue$3.run(Unknown Source) 
    at java.awt.EventQueue$3.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) 
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) 
    at java.awt.EventQueue$4.run(Unknown Source) 
    at java.awt.EventQueue$4.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) 
    at java.awt.EventQueue.dispatchEvent(Unknown Source) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
    at java.awt.EventDispatchThread.run(Unknown Source) 

어떻게하면 서버와 그 구성 요소를 제대로 닫을 수 있습니까?

+0

'scanner'와'stream'은 정의되지 않습니다; 'null'을 확인하십시오. 귀하의 "SocketException' : 소켓 폐쇄"오류 - 당신은 그걸로 살아야 할거야; 소켓을 기다리는 동안 소켓이 닫히면 '예외'를 ​​잡아서 멋지게 기록하십시오. –

답변

0

서버 소켓을 갑자기 닫지 않고 스트림을 닫습니다.

이 시도 :

stream.close(); 
관련 문제