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

暂停Swingworker
EN

Stack Overflow用户
提问于 2014-07-10 09:32:18
回答 1查看 108关注 0票数 0

我有一个GUI,它有一个按钮,需要定期按下,在某种意义上,它应该暂停之间。但我无法做到这一点。我尝试过使用Thread.sleep()。下面是代码。

代码语言:javascript
复制
protected Object doInBackground() throws Exception {

            while(true){
                 btnSend.doClick();
                  try { 
                    Thread.sleep(2000);
                    continue;
                } catch (InterruptedException e1) {

                }
              }

    return null;
}

有没有人能告诉我我哪里出了问题,怎么解决?

EN

回答 1

Stack Overflow用户

发布于 2014-07-10 09:42:58

您不应该为此使用SwingWorker,因为您不应该在事件线程之外调用doClick()。如果您只想间歇性地进行此调用,则只需对需要间歇性地在事件线程上执行的调用使用Swing计时器即可。

代码语言:javascript
复制
int timerDelay = 2000;

new Timer(timerDelay, new ActionListener() {
  public void actionPerformed(ActionEvent evt) {
    btnSend.doClick();
  }
}).start();

编辑

你在评论中问:

,但我需要在该按钮单击事件上更新另一个UI。如果我不使用swingworker,另一个用户界面将会冻结。我必须使用swingworker。这样做是可能的吗?

恐怕你弄错了。按钮点击和GUI代码都应该在EDT上。任何由按钮单击的ActionListener生成的后台非图形用户界面代码都应该在SwingWorker中完成,而不是单击本身。

例如,

其他地方

代码语言:javascript
复制
btnSend.addActionListener(new ActionListener() {
  public void actionPerformed(ActionEvent evt) {
    new SwingWorker<Void, Void>() {
      public Void doInBackground() throws Exception {
        //.....
        return null;
      }
    }
  }
});

如果您需要关于您的情况的更具体的建议,那么您将需要考虑创建并发布一个Minimal, Complete, and Verifiable Example Program,在该‘ll中,您可以将代码压缩到仍然可以编译和运行的最小部分,没有外部依赖项(例如,需要链接到数据库或图像),没有与您的问题无关的额外代码,但仍然可以演示您的问题。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24666177

复制
相关文章

相似问题

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