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)
어떻게하면 서버와 그 구성 요소를 제대로 닫을 수 있습니까?
'scanner'와'stream'은 정의되지 않습니다; 'null'을 확인하십시오. 귀하의 "SocketException' : 소켓 폐쇄"오류 - 당신은 그걸로 살아야 할거야; 소켓을 기다리는 동안 소켓이 닫히면 '예외'를 잡아서 멋지게 기록하십시오. –