private void close(){
try {
jTextArea_Msg.append("服务器关闭........");
jButton_Stat.setEnabled(true);
server.close();
in.close();
out.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
java.net.SocketException: socket closed
at java.net.PlainSocketImpl.socketAccept(Native Method)
at java.net.PlainSocketImpl.accept(Unknown Source)
at java.net.ServerSocket.implAccept(Unknown Source)
at java.net.ServerSocket.accept(Unknown Source)
at org.server.ServerMain.run(ServerMain.java:243)
at java.lang.Thread.run(Unknown Source)
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at org.server.ServerMain.close(ServerMain.java:262)
at org.server.ServerMain.access$2(ServerMain.java:257)

解决方案 »

  1.   

    server.close(); 
    in.close(); 
    out.close(); 第一句已经都关了,你后面就不用关了
    或者把顺序换一下
    in.close(); 
    out.close(); 
    server.close(); 
      

  2.   

    private void close(){
    try {
    jTextArea_Msg.append("服务器关闭........");
    jButton_Stat.setEnabled(true);
    in.close();    261行
    out.close();
    socket.close();
    server.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }这样也出异常
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at org.server.ServerMain.close(ServerMain.java:261)
    at org.server.ServerMain.access$2(ServerMain.java:257)
    at org.server.ServerMain$3.actionPerformed(ServerMain.java:163)
      

  3.   

    下面是完整代码什么问题,在代码里有注释
    private void Start(){
    try {
    server = new ServerSocket(port);
    jTextArea_Msg.append("服务器启动"+"\n");
    jButton_Stat.setEnabled(false);
    } catch (IOException e) {
    e.printStackTrace();
    }
    trd.start();  启动线程
    }

    public void run() {
    while(!flag && !server.isClosed()){
    try {
    socket = server.accept();
    System.out.println("ok............");
    out = new ObjectOutputStream(socket.getOutputStream());
    out.flush();
    in = new ObjectInputStream(socket.getInputStream());
    ServerMain.jTextArea_User.append(in.readObject().toString());
    new ServerReceive(in,socket).start();
    } catch (IOException e) {
    e.printStackTrace();
    } catch (ClassNotFoundException e) {
    e.printStackTrace();
    }
    }
    }
    private void close(){
    try {
    //trd.stop();  加上这句,关闭不出异常了,但在启动就启动不了了
    trd.interrupt(); 加上这句,还是出异常 jTextArea_Msg.append("服务器关闭........");
    jButton_Stat.setEnabled(true);
    //in.close();
    //out.close();
    //socket.close();  上面3个不注释掉,就出现空指针异常 server.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
      

  4.   

     //----------------端口监听-------------//
    public void run() {
    while(!flag && !server.isClosed()){
    try {
    socket = server.accept(); 249行
    out = new ObjectOutputStream(socket.getOutputStream());
    out.flush();
    in = new ObjectInputStream(socket.getInputStream());
    ServerMain.jTextArea_User.append(in.readObject().toString());
    new ServerReceive(in,socket).start();
    } catch (IOException e) {
    e.printStackTrace();
    } catch (ClassNotFoundException e) {
    e.printStackTrace();
    }
    }
    }

    //----------------关闭服务器-------------//
    private void close(){
    try {
    flag = true;
    ServerReceive.flag = true;
    jTextArea_Msg.append("服务器关闭........"+"\n");
    jButton_Stat.setEnabled(true);
    server.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }java.net.SocketException: socket closed
    at java.net.PlainSocketImpl.socketAccept(Native Method)
    at java.net.PlainSocketImpl.accept(Unknown Source)
    at java.net.ServerSocket.implAccept(Unknown Source)
    at java.net.ServerSocket.accept(Unknown Source)
    at org.server.ServerMain.run(ServerMain.java:249)
    at java.lang.Thread.run(Unknown Source)