所以我有一個線程來接收來自客戶端的數據。有一個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