जावा में ज़िप या निकालने के दौरान ज़िप उपयोगिता में प्रगति पट्टी कैसे जोड़ें?

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

//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();
               }
            <>
        }

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

       //Finish zip process
        zos.close();
        System.out.println("finished");
} catch (IOException e) {
        e.printStackTrace();
}
}
0
जोड़ा संपादित
विचारों: 1
प्रश्न क्या है? दिया गया कोड काम नहीं करता है?
जोड़ा लेखक javagirl, स्रोत

2 उत्तर

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

0
जोड़ा

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

0
जोड़ा