だから私はクライアントからデータを受信するためのスレッドを持っています。このデータを読み取る ObjectInputReader があります。ObjectInputReader を try-catch で初期化できなかった場合、クライアントがサーバーに通知せずに切断した場合、try-catch は例外を呼び出す必要があります。
そのため、Catch-Statement で「クライアントの切断」処理を行いました。しかし、それは決して起こりません。
しかし、デバッグでサーバーを実行していて、Catch-Statement にブレークポイントを設定すると、例外が発生し、すべてが希望どおりに処理されます。ただし、ブレークポイントがある場合のみであり、ない場合 (デバッグまたはリリース) はありません。
私は日食を使用しています。最新バージョンだと思います。
誰かがこの「バグ」に遭遇したことがありますか? それとも私は何か間違ったことをしていますか?
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--;
}
}
}
}
};