2012-05-24 12 views
5

Me gustaría mostrar la barra de progreso en mi aplicación de columpio, que comprime el archivo seleccionado. para este proceso, quiero mostrar una barra de progreso durante el procesamiento. Puede estar en JOptionPane o en un panel dado como un parámetro para la utilidad.cómo agregar la barra de progreso a la utilidad zip al comprimir o extraer en java?

//Select a text file to be zip  
JFileChooser chooser = new JFileChooser(); 
chooser.setCurrentDirectory(new File(".")); 


chooser.setFileFilter(new javax.swing.filechooser.FileFilter() { 
    public boolean accept(File f) { 
    return f.getName().toLowerCase().endsWith(".txt") 
     || f.isDirectory(); 
    } 

    public String getDescription() { 
    return "GIF Images"; 
    } 
}); 

String source =""; 
int r = chooser.showOpenDialog(new JFrame()); 
if (r == JFileChooser.APPROVE_OPTION) { 
    source = chooser.getSelectedFile().getPath(); 
    File file = chooser.getSelectedFile(); 

//Start ZIP 
try { 

     String target = "upload/data-1.zip"; 
     ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(target)); 
     FileInputStream fis = new FileInputStream(file); 

     // put a new ZipEntry in the ZipOutputStream 
     zos.putNextEntry(new ZipEntry(file.getName())); 

     int size = 0; 
     byte[] buffer = new byte[1024]; 
     JProgressBar pb = new JProgressBar(); 
     pb.setStringPainted(true); 
     pb.setIndeterminate(true); 

     JPanel panel = new JPanel(); 
     panel.add(pb); 
     JOptionPane.showInputDialog(panel); 



     // read data to the end of the source file and write it to the zip 
     // output stream. 
     while ((size = fis.read(buffer, 0, buffer.length)) > 0) { 
       zos.write(buffer, 0, size); 
       pb.setValue(size); 
       pb.repaint(); 
       if (size >= file.size) { 
       panel.dispose(); 
       } 
      <<HERE I TRIED TO GIVE PROGRESS ABR VALUE BUT NOT SUCCEDED>> 
     } 

     zos.closeEntry(); 
     fis.close(); 

     // Finish zip process 
     zos.close(); 
     System.out.println("finished"); 
} catch (IOException e) { 
     e.printStackTrace(); 
} 
} 
+0

¿cuál es la pregunta? El código dado no funciona? – javagirl

Respuesta

5

considerar el uso de SwingWorker. Puede actualizar la IU con resultados intermedios usando el método process(). Además, SwingWorker ha vinculado la propiedad progress. Puede usar setProgress() para actualizarlo. A continuación, agregue PropertyChangeListener para responder a las actualizaciones de la propiedad progress.

Echa un vistazo How to Use Progress Bars. El artículo demuestra la colaboración de SwingWorker con una barra de progreso.

2

no se puede comprimir el archivo en el EventDispatchThread, o su GUI es bloqueado durante el proceso y que no va a ver el progreso en el ProgressBar. Use un SwingWorker.

Cuestiones relacionadas