首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设置JProgressBar

设置JProgressBar
EN

Stack Overflow用户
提问于 2016-03-23 19:54:32
回答 1查看 83关注 0票数 0

我使用javax.swing为一个小应用程序构建GUI。一切都很好,但我只是有点怀疑。我想使用一个JProgressBar来表示进程导出正在运行。由于类Post本身实现了Runnable,如果在run()之后调用setIndeterminate(),那么甚至在export()结束之前就会执行它,就像Java将其放入另一个Thread中一样。

有人知道怎么解决这个问题吗?

代码语言:javascript
复制
    this.jProgressBar2.setIndeterminate(true);
    SwingUtilities.invokeLater(new Runnable() {
        public void run() {

            Post post = new Post();
            post.export();
        }
    });

    this.jProgressBar2.setIndeterminate(true);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-23 20:09:55

您的问题是,由于post.export()是在后台线程中运行的(我假设),所以您的代码不会阻塞,运行方法之后的代码将立即被调用。

建议:

  • 摆脱SwingUtilities.invokeLater(new Runnable() {语句,因为代码已经在Swing事件线程上运行,因此这没有任何作用。
  • 当post完成导出时,您需要一些通知机制。为Post提供一个SwingPropertyChangeSupport对象,以及一个允许外部类(这里是GUI)添加PropertyChangeListeners并与bean绑定一起使用的addPropertyChangeListener(...)方法,以及在处理完成时PropertyChangeListeners通知GUI。这是通过在完成导出时对支持对象调用适当的firePropertyChange(...)来完成的。
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36187507

复制
相关文章

相似问题

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