首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swingworker超时

Swingworker超时
EN

Stack Overflow用户
提问于 2011-08-12 23:12:18
回答 1查看 2.4K关注 0票数 4

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

代码语言:javascript
复制
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吗?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-08-13 00:36:07

是的,您链接到的解决方案是一个合理而简单的解决方案(“最佳”是非常主观的:)您可以利用SwingWorker#get,这是未来界面的一部分:

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7042186

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档