2016-03-23 38 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(...)來完成的。