所以我有一个线程来接收来自客户端的数据。有一个ObjectInputReader来读取这个数据。如果ObjectInputReader无法在我的try-catch中初始化,如果客户端断开而不通知服务器会发生什么情况,try-catch应该调用异常。异常只在调试+断点
所以我有我的“断开客户端”处理在Catch语句。但它从未发生过。
但是,如果我在调试时运行服务器并在Catch-Statement中设置了一个断点,那么发生异常并且所有事情都按照我想要的那样进行处理。但只有断点,从来没有(调试或释放)。
我正在使用eclipse,我想最新的版本。
有人曾经碰巧有这个“bug”吗?或者我做错了什么?
private static Runnable receive = new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
ObjectInputStream ois;
while(true)
{
for(int i = 0; i < listSockets.size();i++){
try {
ois = new ObjectInputStream(listSockets.get(i).getInputStream());
int receiveState = (Integer)ois.readObject();
DataPackage dp = (DataPackage)ois.readObject();
listData.set(i,dp);
if(receiveState == 1){ //client disconnected by user
disconnectClient(i);
i--;
}
ois.close();
} catch (IOException | ClassNotFoundException e) {
disconnectClient(i);
i--;
}
}
}
}
};
当你没有断点的时候会发生什么,循环是否会永久循环? – 2013-02-21 10:37:29
嗯,我刚刚发现了一些问题: while(true)启动for循环并检查为0的listSockets.size()。此时,客户端连接并且大小增加。但while循环和检查没有得到通知,增加的大小,所以这些命令之间有一个无限循环。如果我在for之前检查if语句和sysout的大小,一切正常。 – Loki 2013-02-21 11:02:33
当你有断点时,你仍然看到不同的行为? – 2013-02-21 11:08:54