Jprgressbar в диалоговом окне Jdialog не обновляется

я хочу показать ход копирования файла из одной папки в другую с помощью 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){}

person Rohit Rohela    schedule 18.03.2012    source источник
comment
Нет, нет, ты меня неправильно понял, мне просто нужен совет   -  person Rohit Rohela    schedule 18.03.2012
comment
это сработало, на самом деле JprogressBar не обновлялся, в конце он показывает 100%, поэтому я просто хочу, чтобы он работал в реальном времени, спасибо, моя задача выполнена.   -  person Rohit Rohela    schedule 18.03.2012


Ответы (1)


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

person nicktalbot    schedule 18.03.2012
comment
Я изменил свой код, я поместил всю операцию копирования файлов в другой поток, и только индикатор выполнения находится в методе actionPerfromed, но индикатор выполнения обновляется в конце - person Rohit Rohela; 18.03.2012
comment
Как вы сообщаете о прогрессе между потоками? Вам необходимо убедиться, что обновление прогресса отображается в EDT. Вы можете либо синхронизировать, либо пометить процентную переменную как volatile. - person nicktalbot; 22.03.2012