2016-03-23 9 views
0

小さなアプリケーションのGUIを構築するのに私はjavax.swingを使用しています。すべてうまくいきますが、ちょっと疑問があります。 JProgressBarを使用して、プロセスのエクスポートが実行されていることを示したいとします。 Postクラス自身がRunnableを実装しているため、にJavaを入れたので、が終了する前でもrun()の直後にsetIndeterminate()が呼び出された場合は、export()が終了する前に実行されます。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()は、バックグラウンドスレッドで実行されているので、(私は仮定)ということで、runメソッドの後のコードがすぐに呼び出されます。

提案:

  • がコードとしてSwingUtilities.invokeLater(new Runnable() {声明を取り除くには、既にSwingのイベントスレッドで実行されているので、これは何もしません。
  • 投稿がエクスポートされたときの通知メカニズムが必要です。 Give SwingPropertyChangeSupportオブジェクトと、外部クラス(ここではGUI)がPropertyChangeListenersを追加し、Beanバインディングとともにこれを使用してPropertyChangeListenersを使用して処理が完了したときにGUIに通知できるようにするaddPropertyChangeListener(...)メソッドを投稿します。これは、エクスポートが完了したときにサポートオブジェクトの適切なfirePropertyChange(...)を呼び出すことによって行われます。