所以我有一个从客户端接收数据的线程。有一个ObjectInputReader来读取此数据。如果无法在我的try-catch中初始化ObjectInputReader,如果客户端在没有通知服务器的情况下断开连接会发生什么,try-catch应该调用异常。
所以我在Catch-Statement中处理了“disconnect clients”。但它永远不会发生。
但是,如果我在调试时运行服务器并在Catch-Statement中设置一个断点,则会发生异常并且所有内容都会按照我想要的方式处理。但只有断点,永远不会(调试或发布)。
我正在使用eclipse,我认为是最新版本。
有人碰巧遇到过这个“错误”吗?或者我做错了什么?
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--;
}
}
}
}
};
答案 0 :(得分:0)
始终记住,调试可能会影响您的程序。特别是在检查变量时,jvm会导致调用很多toString()方法。如果一个toString()方法更改了其中一个对象的状态,结果将会更改。尝试像
这样的东西} catch (IOException | ClassNotFoundException e) {
System.out.println("I am here");
disconnectClient(i);
i--;
}
查看程序是否真的跳入catch块或者disconnectClient方法有缺陷。如果你再添加一些System.out。您可能会看到程序停止。