選択したファイルを圧縮する、swing アプリにプログレス バーを表示したいと思います。このプロセスでは、処理中に進行状況バーを表示したいと考えています。これは、ユーティリティのパラメーターとして JOptionPane または特定のパネルにある場合があります。
//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();
}
}