2012-03-18 10 views
0

jprogressbarを使用してファイルをあるフォルダから別のフォルダにコピーする進行状況を表示したい。私がやったことはすべて終わったが、最後にはjprogress barが走り、最後は100%を示す。 私は初心者で、EDTを使うべきだと言っているこのフォームのトピックを読んでいますが、それでも私はすべてを得ていませんでした。私はまた、Jprogressバーを更新する別のスレッドを作ったが、何も起こっていない。コードの私の部分は
JdialogボックスのJprgressbarが更新されない

 jProgressBar1.setMinimum(0); 
     jProgressBar1.setMaximum(100); 
     try 
     { 
      fis = new FileInputStream(read); 
      BufferedInputStream bins = new BufferedInputStream(fis); 
      int b; 
      long copied_data=0; 
      for(int i =0;i<no_of_parts;i++) 
      { 
       copied_data = 0; 
       fos = new FileOutputStream(jTextField2.getText()+"\\"+reading_file_name+".part"+i); 
       bouts = new BufferedOutputStream(fos); 
       while((b = bins.read())!= -1) 
       { 
        bouts.write(b); 
        percentage = (progress*100)/file_size; 
        jProgressBar1.setValue(percentage); 
        copied_data++; 
        progress++; 

        if(copied_data==each_part_size_in_byte) 
        { 
         bouts.flush(); 
         bouts.close(); 
         break; 
        } 
       } 
       bouts.flush(); 
       bouts.close(); 

      } 

     }catch(Exception e){} 
+0

いいえ、私は間違っています。ちょっとしたアドバイスが必要です。 –

+0

実際にはJprogressBarは更新されていませんでした。最後に100%表示されるので、リアルタイムで実行する必要があります。 –

答えて

3

プログレスバーは、ファイルのコピー操作と同じスレッドで実行されているべきではありません更新するコードです。別のスレッドとSwingタイマーで実行するにはファイルコピー操作が必要です。コピータスクの進行状況を照会し、EDTのプログレスバーを定期的に更新する必要があります。現在進行中のイベント・スレッドをロックしているため、プログレス・バーが更新されないようにEDT上のすべてを実行しています。 Swingコンポーネントの更新にのみEDTを使用する必要があります。その他はすべて他のスレッドで実行する必要があります。

+0

コードを変更しました。ファイルのコピー操作を他のスレッドに入れました。進行状況バーだけがactionPerfromedメソッドにありますが、まだ進行状況バーは最後に更新中です –

+0

スレッド間の進捗状況をどうやって伝えていますか? EDTが進行状況の更新を確認する必要があります。揮発性パーセンテージを同期またはマークすることができます。 – nicktalbot

関連する問題