Java로 TCP Local Server를 만들다가 Address already in use: JVM_Bind programmable 오류를 만났다. 내가 임의로 지정한 PORT가 여러번 실행되면서 오류가 발생한 것이다.
단일 Socket만 열 것이기 때문에 Exception으로 인한 프로그램 종료시 Event Hooking을 시도하였다.
(사실 더 좋은 방법이 생각나지 않아서 이렇게 했음. 더 좋은 방법 아시는 분은 댓글로 의견 부탁드려요)
Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() { @Override public void run() { MSLog.log("@shutdown hook tread"); try { TcpServer.getInstance().close(); } catch (IOException e) { MSLog.log("@shutdown hook tread. TcpServer Close Fail"); e.printStackTrace(); } finally { MSLog.log("@shutdown hook tread. TcpServer Close Complete"); } } }));
이렇게 Shutdown시 hook을 사용하여 코드를 넣었더니 오류가 해결되었다.
뭔가 찝찝하긴 하다..
% MSLog와 TcpSever Class는 임의 작성 class 임
% MSLog는 형변환 귀찮아서 만든 Java Generic 이용한 Log.
static boolean DBG 값에 따라서 형 변환 없이 로그 출력 http://mantdu.tistory.com/841
public class MSLog {
private static String psmTitle = "GTK_WIFISOUND_LOG >> ";
static public <T extends Object> void log(T msg) {
if(StaticData.DBG) System.out.println(psmTitle.concat(msg+""));
}
}
'소프트웨어 > Android/Java/Ndk' 카테고리의 다른 글
android] chat head (0) | 2016.02.13 |
---|---|
android] YouTubePlayer 객체가 파괴되는듯하다.. (0) | 2016.02.11 |
android] YouTube developer (0) | 2016.02.10 |
JavaEffective] 변경 가능 데이터의 동기화(Lock, Synchronized, Volatile) (0) | 2015.08.21 |
JavaEffective] singleton instance 훔치기 (0) | 2015.06.11 |
JavaEffective] Build Pattern (0) | 2015.06.11 |
android] layout getWidth() return 0 (1) | 2015.05.17 |