2012-07-03 2 views
4

소켓을 사용하는 Android 응용 프로그램에서 작업 중입니다. 소켓을 열고 연결을 시도하는 initializeStreams()라는 함수가 있습니다. 이 함수는 연결을 설정할 수없는 경우 ConnectException을 발생시킵니다. 그러나 어떤 이유로 ConnectException에 대한 catch 블록이있는 initializeStreams()를 호출하는 코드에서 로그는 catch 블록으로 이동하는 대신 예외에 대한 자체 스택 추적을 인쇄합니다. 정확한 예외가 발생하더라도 catch 블록에는 절대 도달하지 않습니다.어떤 이유로 잡히지 않은 ConnectException이 있습니다.

try 블록 :

try { 
     initializeStreams(); 

      /* other code */ 

    } catch (ConnectException e) { 
     Log.i(TAG, "caught connect exception"); 

    } 

initializeStreams() : 다음 코드의

public void initializeStreams() throws ConnectException { 
    try { 
     Log.i(TAG, "Attempting to connect"); 

     requestSocket = new Socket(SERVER_ADDR, PORT); 

        /* other code */ 


    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

나는이 알아낼 수 없습니다, 그래서 어떤 도움이 많이 주시면 감사하겠습니다.

+0

코드에 게시 한 유일한 소켓 작업이 ConnectException을 throw하지 않기 때문에 그 이유가 무엇인지 알 수 없습니다. 나머지 코드는 게시하십시오. – Th0rndike

+0

예. 소켓 초기화 이전에 로그가 인쇄 된 후 catch 블록에있는 로그 대신 ConnectException 스택 추적이 인쇄됩니다. initializeStreams()는 ConnectException을 던지는 유일한 함수이고 첫 번째 코드 단편은 호출 된 유일한 곳입니다. – aakbari1024

+0

무엇을 의미합니까? 그 소켓 작업은 예외를 throw하는 것으로, 스택 추적에서 그렇게 말하며, 현재 내 프로그램에서 유일한 소켓 작업입니다. – aakbari1024

답변

2

예외를 연결하여 catch 블록에 넣어야합니다. 다음을 시도해보십시오

public void initializeStreams() throws ConnectException { 
try { 
    Log.i(TAG, "Attempting to connect"); 

    requestSocket = new Socket(SERVER_ADDR, PORT); 

       /* other code */ 


} catch(ConnectException e){ 
    throw e; 
} 

catch (IOException e) { 
    e.printStackTrace(); 
} 
+0

이 문제가 해결되었습니다. 감사합니다. – aakbari1024

+0

사전 편집 양식으로 컴파일되지 않기 때문에 이상합니다. 편집 된 버전의 initializeStreams()에는 완전히 생략 된 쓸데없는 catch/throw 시퀀스가 ​​포함되어 있습니다. – EJP

+0

@EJP 네, 맞습니다. 편집 된 버전에는 쓸데없는 try/catch 블록이 있습니다. 나는 내 직책을 정정했다. 오류를 지적 해 주셔서 감사합니다. –

2

ConnectException 차례로 그래서 IOExceptioninitializeStreams()에 걸리게 ConnectException.에 대한 catch 난 그냥 아예 그 try/catch 블록을 제거 할 IOException,를 확장 SocketException 확장 : 많은 지점이 아니에요없이이 방법에서 완전히 복귀에 연결.