0

jprogressbar を使用して、あるフォルダーから別のフォルダーにファイルをコピーする進行状況を表示したいと考えています。私が行ったすべてのことですが、最後に jprogress バーが実行され、最後に 100% が表示されます。私は初心者で、EDT を使用する必要があるというこのフォームのトピックを読みましたが、それでもすべてを理解できませんでした。Jprogress バーを更新する別のスレッドも作成しましたが、何も起きていません。コードの私の部分は

        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){}
4

1 に答える 1

3

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

于 2012-03-18T14:19:48.123 に答える