2011-08-12 3 views
4

나는 SwingWorker를 사용하여 TCP 연결을 통해 데이터를 읽고 돌아 왔을 때 표시합니다.Swingworker Timeout

new SwingWorker<EnvInfoProto, Void>() { 
    @Override 
    public EnvInfoProto doInBackground() { 
    try { 
     xxx.writeTo(socket.getOutputStream()); 
     return ProtoMsg.parseFrom(socket.getInputStream()); 
    } catch(IOException ignore) { } 
    return null; 
    } 

    @Override 
    public void done() { 
    try { 
     UpdateGui(get()); 
    } catch (Exception ignore) {} 
    } 
}.execute(); 

소켓이 작동하지 않을 때 문제가 발생합니다. writeTo 이후 소켓의 입력을 영원히 기다린다. 잠시 후 타임 아웃하는 가장 쉬운 방법은 무엇입니까? 이 경우에도 this이 최상의 솔루션입니까? 나는 그 해결책에 스윙 워커를 아직도 사용합니까?

SwingWorker<EnvInfoProto, Void> worker = new SwingWorker<EnvInfoProto, Void>() { 
    ... 
}; 
worker.execute(); 
worker.get(15, TimeUnit.SECONDS); 
//will block 15 seconds at most, then throw TimeoutException 
:

감사

답변

4

예,이 솔루션은 당신이 합리적이고 쉬운 솔루션 ("가장"그 미래 인터페이스의 일부입니다, 당신은 SwingWorker#get을 활용할 수 :) 너무 주관적이다에 연결

물론 목표를 달성 할 수있는 여러 가지 방법을 생각해 낼 수는 있지만이 솔루션보다 코드가 더 많이 포함되어있을 것이라고 생각합니다.