捕获异常的顺序问题
在做小程序练习的时候,设置BindException异常,在此处老是提示错误(已经引入包java.net.BindException),如下图所示:

最终的解决方法是将此异常处理中的BindException异常与IOException异常互换位置,即先捕获BindException异常,然后捕获IOException异常。
附修改后可正常运行的代码:
import java.io.DataInputStream;
import java.io.EOFException;
import java.io.IOException;
import java.net.BindException;
import java.net.ServerSocket;
import java.net.Socket;
public class ChatServer {
static boolean isStarted = false;
static ServerSocket ss = null;
static Socket s = null;
static DataInputStream dis = null;
public static void main(String[] args) {
try {
ss = new ServerSocket(8888);
} catch (BindException e) {
System.out.println("端口使用中....");
System.out.println("请关掉相关程序并重新运行!");
System.exit(0);
} catch (IOException e) {
e.printStackTrace();
}
/*以上异常处理,BindException异常与IOException异常顺序颠倒会导致程序报错*/
try {
isStarted = true;
while (isStarted) {
boolean isConnected = false;
s = ss.accept();
isConnected = true;
System.out.println("success connected");
dis = new DataInputStream(s.getInputStream());
while (isConnected) {
String str = dis.readUTF();
System.out.println(str);
}
}
// dis.close();
} catch (EOFException e) {
System.out.println("client is closed!");
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (dis != null)
dis.close();
if (s != null)
s.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
}
浙公网安备 33010602011771号