2012-03-18 4 views
0

Я хочу показать ход копирования файла из одной папки в другую с помощью jprogressbar. Все, что я сделал, но jprogress bar работает в конце и показать 100% в конце. Я начинаю читать и читаю тему в этой форме, в которой говорится, что я должен использовать EDT, но все же я не получил все. Я также сделал еще один поток, чтобы обновить панель Jprogress, но ничего не происходит. моя часть кода
Jprgressbar в поле Jdialog не обновляется

 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, которые препятствуют обновлению индикатора выполнения, когда вы блокируете поток событий во время выполнения операции. Вы должны использовать EDT только для обновления компонентов Swing, а все остальное должно выполняться в других потоках.

+0

Я изменил свой код, я поместил всю операцию копирования файлов в другой поток, и только индикатор выполнения находится в методе actionPerfromed, все же индикатор выполнения обновляется в конце –

+0

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