当前位置: 首页 > 面试题库 >

Swingworker超时

王弘和
2023-03-14
问题内容

我正在使用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之后,它将永久等待套接字上的输入,从而产生问题。一段时间后最简单的超时方法是什么?是否这也是在这种情况下,最好的解决办法?在该解决方案中,我还会使用摇摆工人吗?

谢谢


问题答案:

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

当然,您可以想出各种方法来实现您的目标,但是我敢打赌,涉及的代码比此解决方案要多,所以我尝试一下。



 类似资料:
  • 问题内容: 我正在尝试在我的应用程序中实现一个类。有没有办法设置时间长度,之后SwingWorker会“超时”?我当时在想,也许会抛出一个异常,我可以捕捉然后处理。我只是不确定如何实现它。 感谢你的帮助! 问题答案: 为什么不将您的任务嵌入到Runnable中,将其放入新的单线程ExecutorService中,然后在适当的超时时间内对生成的Future执行。这将为您提供超时功能,因为如果作业未及

  • 问题内容: 我在FileReader上应用SwingWorker时遇到问题,我的观点是我需要在SwingWorker上实现FileReader,以使UI显示文件中的文本,这是我的代码 但是,它不会在UI文本区域上附加任何内容 有人有解决方案吗?谢谢 问题答案: 对我来说效果很好:

  • 问题内容: 我对SwingWorker和Java GUI有疑问。 我有几类,其处理的信息,我们可以给他们打电话,和。此处理可能需要很长时间。 这些都是的子类,但是本身并不是直接调用的(这些类使用继承自的方法。为了使EDT自由绘制进度条,在保持对象层次结构时最好的使用方法是什么?是否具有包装器类,并且有其调用?即使不扩展,它仍然可以按我期望的那样工作吗? 编辑:澄清我的问题,即使他们已经是子类,我如

  • 问题内容: 我要做什么? 单击时,将执行。在方法内部,我将方法的每个索引传递给方法,以便可以在中显示它。 发生了什么 ? 如果我 不 守行作为 注释 ,在我的方法,则是 按预期工作 。尽管如果我将 其注释掉 ,则 停止响应 。 难道我做错了什么 ? Java版本: 这是我正在使用的代码: *编辑1:* 按照建议,如果我添加,它确实可以工作,但是会抛出如下所示的错误。这样就可以了。但这是 合法 的表

  • 问题内容: 朋友,我正在开发一个Java应用程序。多数民众赞成在性能监控。关于这一点,我在一堂课中获取价值,并在另一堂课中绘制图表。我想使用swingworker交替执行这两个课程。 上面的类用于收集服务器状态并将其存储在哈希图中。该类称为“ MySQLClass”。 上面的代码是在一个称为“ Graph”的类中绘制Graph的代码。我如何使用Swing Worker交替执行此操作并在每次迭代中绘

  • 问题内容: 我有一个自定义的JDialog,当我的SwingWorker线程启动时会弹出。该对话框只有一个JProgressbar和一个Button(取消按钮)。我试图弄清楚如何取消我的SwingWorker,但是没有运气。我想我走对了。我编写了一个cancel方法,现在我只需要弄清楚按下按钮时如何调用它。代码如下… 问题答案: 您的取消按钮应调用该方法 在您的工作人员中,必须确保检查取消标志 请