Итак, у меня есть поток для получения данных от клиента. Для чтения этих данных есть ObjectInputReader. Если ObjectInputReader не удалось инициализировать в моем try-catch, что произойдет, если клиент отключится без уведомления сервера, try-catch должен вызвать исключение.Исключение выбрано только в отладочной + точке останова
Итак, у меня есть обработка «Отключить клиент» в Catch-Statement. Но этого никогда не бывает.
Но если я запускаю сервер при отладке и устанавливаю точку останова в 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--;
}
}
}
}
};
Что происходит, когда у вас нет точки останова, выполняется ли цикл, цикл навсегда? –
Ну, есть некоторые проблемы, которые я только что понял: В то время как (true) запускает цикл for и проверяет listSockets.size(), который равен 0. На этом этапе клиент соединяется и размер увеличивается. Но цикл while и check не получают уведомления о том, что размер увеличивается, поэтому между этими командами существует бесконечный цикл. Если я проверяю размер с помощью оператора if и sysout размером до начала, все работает. – Loki
Вы все еще видите другое поведение между тем, когда у вас есть точка останова, а когда нет? –