【问题标题】:Setting a JProgressBar设置 JProgressBar
【发布时间】:2016-03-23 19:54:32
【问题描述】:

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

有人知道如何解决吗?

    this.jProgressBar2.setIndeterminate(true);
    SwingUtilities.invokeLater(new Runnable() {
        public void run() {

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

    this.jProgressBar2.setIndeterminate(true);

【问题讨论】:

    标签: java swing runnable event-dispatch-thread jprogressbar


    【解决方案1】:

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

    建议:

    • 去掉SwingUtilities.invokeLater(new Runnable() { 语句,因为代码已经在 Swing 事件线程上运行,所以它什么也不做。
    • 您需要一些通知机制来通知帖子何时完成导出。给 Post 一个 SwingPropertyChangeSupport 对象,以及一个 addPropertyChangeListener(...) 方法,该方法允许外部类(此处为 GUI)添加 PropertyChangeListeners 并将其与 beans 绑定以及 PropertyChangeListeners 一起使用,以便在处理完成时通知 GUI。这是通过在导出完成时调用支持对象上的适当firePropertyChange(...) 来完成的。

    【讨论】:

      猜你喜欢
      • 2015-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-07
      • 2015-05-29
      • 1970-01-01
      相关资源
      最近更新 更多