【问题标题】:Swingworker TimeoutSwingworker 超时
【发布时间】:2011-08-12 15:12:17
【问题描述】:

我正在使用 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 吗?

谢谢

【问题讨论】:

    标签: java swing timeout swingworker


    【解决方案1】:

    是的,您链接的解决方案是一个合理且简单的解决方案(“最佳”是如此主观:)您可以利用 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
    

    当然你可以想出不同的方法来达到你的目标,但我敢打赌,涉及的代码比这个解决方案更多,所以我会试一试。

    【讨论】:

      猜你喜欢
      • 2012-03-04
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      • 2011-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多