设置 JProgressBar

Setting a JProgressBar

我正在使用 javax.swing 为一个小应用程序构建 GUI。一切正常,但我只是有点怀疑。我想用一个 JProgressBar 来表示进程导出是 运行。 由于 class 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);

你的问题是因为 post.export() 在后台线程中被 运行 (我假设)然后你的代码不会阻塞,并且 运行 方法之后的代码将是立即打电话。

建议:

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