Jprgressbar в окне Jdialog не обновляется - PullRequest
0 голосов
/ 18 марта 2012

Я хочу показать прогресс копирования файла из одной папки в другую с помощью jprogressbar.Все, что я сделал, но jprogress bar работает в конце и показывает 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){}

1 Ответ

3 голосов
/ 18 марта 2012

Код, который обновляет индикатор выполнения, не должен выполняться в том же потоке, что и операция копирования файла.Вам нужно, чтобы операция копирования файла выполнялась в отдельном потоке, и таймер Swing запрашивал выполнение задачи копирования и периодически обновлял индикатор выполнения в EDT.В настоящее время вы выполняете все операции с EDT, что препятствует обновлению индикатора выполнения, поскольку вы блокируете поток событий во время выполнения операции.Вы должны использовать EDT только для обновления компонентов Swing, а все остальное должно выполняться в других потоках.

...