2011-08-02 15 views
1

このコードセクションでは、基本的にGUIにボタンを無効にし、スレッドがもう実行されていないときにポップアップウィンドウを表示するようにしたいとします。終了)。Java GUIでのスレッド数の使用

public void actionPerformed(ActionEvent event) 
{ 
    String command = event.getActionCommand(); 

    //If btnConvertDocuments is clicked, the FileConverter method is called and the button is then disabled [so as to prevent duplicates]. 
    if (command.equals("w")) 
    { 
     new Thread(new Runnable() 
     { 
      public void run() 
      { 
       FileConverter fc = new FileConverter(); 

      } 
     }).start(); 
     if (Thread.activeCount() == 0) 
     { 
      btnConvertDocuments.setEnabled(false); 
      //Validation message ensuring completion of the step. 
      JOptionPane.showMessageDialog(this, "Step 1 Complete!", "Validation", JOptionPane.INFORMATION_MESSAGE); 
     } 
    } 

なぜif (Thread.activeCount() == 0)が呼び出されないように見えるのですか?それは私の目的を達成するためにやりたいことではありませんか?入力をお願いします。

+0

によってSwingWorker、非常に良い例に、あなたにBackGroungタスクをラップすることdは、あなたは[ 'ExecutorService'](HTTPをチェックアウトする場合があります。 oracle.com/javase/6/docs/api/java/util/concurrent/ExecutorService.html)および['Future '](http://download.oracle.com/javase/6/docs/api/java/)を参照してください。 util/concurrent/Future.html)。 –

答えて

2

スレッドの状態を確認したい場合は、Javaプログラム(たとえば、メインスレッド:)を実行して、hereと表示すると実行されるスレッドが多数あります(getState()メソッドを使用してくださいThread変数へのスレッド:それは、現在のスレッドをブロックするようtが(またはタイムアウトになるまで)行われるまで

 Thread t = new Thread(new Runnable() 
     { 
      public void run() 
      { 
       FileConverter fc = new FileConverter(); 

      } 
     }); 
     t.start(); 
     if (t.getState().equals(Thread.State.TERMINATED)) { ... } 

は、あなたの質問に多く見ると、あなたは、同様joinメソッドを呼び出すことができ

+0

したがって、getState()メソッドの条件では、私は正確に何を言いますか? –

+0

これをスレッドの状態の1つと比較します。http://download.oracle.com/javase/7/docs/api/java/lang/Thread.State.html – MByD

+0

それはそうです... 'if( t1.getState()。TERMINATED!= null) '...? –

2

。それは約Concurency in Swing、より良いwoulです//ダウンロード:スレッドを直接使用する代わりに@Hovercraft Full Of Eelsによって、または実装Executorhere

+0

+1これは私が考慮しなかったものです(それはひどい間違いです...) – MByD

+0

ちょうど私が使用した結合とは対照的に、このエグゼキュータを使用する点で違いはありますか? –

+0

@マルチスレッドのプレイヤーと一緒にプレイすることができますが、SwingWorkerを使用すると、GUIがBackGroundタスク中にフリーズしないことが重要です.JComponentsはすべてアクセス可能ですが、あなたも可能な方法ですが、リテートビットは回避策のために複雑です、ここを見てhttp://stackoverflow.com/questions/6051755/java-wait-cursor-display-problem/6060678#6060678 – mKorbel

関連する問題