2012-05-24 14 views
5

मैं अपने स्विंग ऐप में प्रगति पट्टी दिखाना चाहता हूं, जो चयनित फ़ाइल को ज़िप करेगा। इस प्रक्रिया के लिए मैं प्रसंस्करण के दौरान एक प्रगति पट्टी दिखाना चाहता हूं। यह जॉइनपेन या किसी दिए गए पैनल में उपयोगिता के पैरामीटर के रूप में हो सकता है।जावा में ज़िप या निकालने के दौरान ज़िप उपयोगिता में प्रगति पट्टी को कैसे जोड़ना है?

//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

प्रश्न क्या है? दिए गए कोड काम नहीं करता है? – javagirl

उत्तर

5

SwingWorker का उपयोग करने पर विचार करें। आप process() विधि का उपयोग कर इंटरमीडिएट परिणामों के साथ यूआई अपडेट कर सकते हैं। इसके अलावा, SwingWorkerprogress संपत्ति बाध्य है। आप इसे अद्यतन करने के लिए setProgress() का उपयोग कर सकते हैं। फिर, progress संपत्ति अपडेट का जवाब देने के लिए PropertyChangeListener जोड़ें।

How to Use Progress Bars देखें। लेख एक प्रगति पट्टी के साथ स्विंगवर्कर के सहयोग का प्रदर्शन करता है।

2

आप EventDispatchThread पर फ़ाइल को ज़िप नहीं कर सकते हैं, या अपने गुई प्रक्रिया के दौरान अवरुद्ध है और आप ProgressBar में प्रगति नहीं देख सकेंगे। एक स्विंगवर्कर का प्रयोग करें।

संबंधित मुद्दे