BufferedReader.readline()의 예외를 잡는 방법을 소켓에서 데이터를 읽는 (의이 T1 가정 해 봅시다) 그것의 방법 중 하나에서. 여기자바 소켓 I는 스레드가
T1.running = false;
socket.close();
을 나는 해결책을 찾을 수있는 시나리오이다 : 따라서, T2는 다음을 수행
- T1이 활성화되고 어떤 입력을 대기하는 단계, 즉 차단 읽어.
- 컨텍스트 스위칭
- T2가 활성 false로 실행 세트,
- T1 차단하고, T2 소켓 폐쇄 때문에이 T1가 예외를 발생 전환 소켓
- 컨텍스트를 닫는다. 내가 원한 것은이 SocketException을 잡는 것이다. 나는 T1.run()에 try/catch (SocketException)를 넣을 수 없다. 어떻게 T1의 실행 방법에서 그것을 잡을 수 있습니까? T1이 실행 중일 때 그것을 잡을 수 없다면 다른 곳에서 어떻게 잡을 수 있습니까?
PS : 내가 단계별로 코드 단계를 디버깅 할 때
"스레드 디버깅에 대한 또 다른 질문은"일반적으로, 내가 컨텍스트 스위치의 '실행중인 활성 라인'을 잃게됩니다. 내가 T1의 20 행에 있다고 가정 해 봅시다. 컨텍스트 스위치가 발생합니다. 프로그램이 T2의 30 행에서 계속되지만, 디버거가 T2의 30 행에 나타나지 않거나/실행되지 않는다고 가정 해 봅시다. '사라진다. 그래서 코드를 제어 할 수 없게됩니다. Java 용 Eclipse와 C# 용 Visual Studio를 사용합니다. 그렇다면 컨텍스트 스위치에서 디버깅하는 동안 코드를 추적하는 가장 좋은 방법은 무엇입니까?
'SocketException'은'IOException'을 확장합니다. 따라서'catch' 절은'SocketException'을 잡아야합니다. – reprogrammer
T1의'run()'메소드에서'SocketException'을 잡을 수없는 이유는 무엇입니까? (그것은'IOException'의 서브 클래스이기 때문에 기존의'catch' 절에 의해 어쨌든 잡힐 것입니다. 만약 당신이 그것을 따로 잡으려고한다면, 이전의'catch' 절에 그것을 나열하면됩니다.) –
나는 그것을 안다. . 그러나 어쨌든, 나는 왜 프로그램이 그것을 잡지 못하는지 모른다. 내가 거기에 중단 점을 넣는 것을 의미하지만 프로그램은 catch 블록에서 멈추지 않습니다. –