에서만 발생합니다. 따라서 클라이언트로부터 데이터 받기에 대한 스레드가 있습니다. 이 Data를 읽는 ObjectInputReader가 있습니다. 내 try-catch에서 ObjectInputReader를 초기화 할 수없는 경우 클라이언트가 서버에 알리지 않고 연결을 끊으면 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--;
}
}
}
}
};
중단 점이 없을 때 어떻게됩니까? 루프가 영원히 반복됩니까? –
잘 알고있는 문제가 있습니다. while (true)는 for 루프를 시작하고 listSockets.size()가 0인지 확인합니다.이 시점에서 클라이언트가 연결되고 크기가 커집니다. 그러나 while-loop와 check는 크기가 커지므로이 명령들 사이에 무한 루프가 있음을 알리지 않습니다. if 문과 sysout 크기를 확인하기 전에 for가 사용하면 모든 것이 작동합니다. – Loki
중단 점이있을 때와 그렇지 않을 때 여전히 다른 동작이 나타 납니까? –