2016-03-23 17 views
0

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

有没有人有一些想法如何解决它?

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

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

    this.jProgressBar2.setIndeterminate(true); 

回答

4

你的问题是,由于post.export()在后台线程中运行(我假设),那么你的代码就不会阻止,并且运行方法之后的代码将被立即调用。

建议:

  • 摆脱SwingUtilities.invokeLater(new Runnable() {语句代码是Swing事件线程上已经在运行,因此这什么都不做。
  • 您需要一些通知机制来完成导出完成后。给Post一个SwingPropertyChangeSupport对象,以及一个允许外部类(这里是GUI)添加PropertyChangeListeners的方法,以及在bean绑定中使用此方法以及在处理完成时通知GUI的PropertyChangeListeners。这是通过在导出完成时调用支持对象上相应的firePropertyChange(...)来完成的。