Swingworker超时

时间:2011-08-12 15:12:18

标签: java swing timeout swingworker

我正在使用SwingWorker通过TCP连接读取数据并在返回时显示。

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吗?

由于

1 个答案:

答案 0 :(得分:4)

是的,您链接的解决方案是一个合理而简单的解决方案(&#34;最好&#34;是如此主观:)您可以利用SwingWorker#get,这是Future界面的一部分:

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

当然,您可以采用不同的方式来实现目标,但我敢打赌,与此解决方案相比,涉及的代码更多,所以我试一试。