增加进度条百分比

increase the progressbar percentage

我有下面的一段代码,其中有一个必须前进的进度条。

public void createFiles(String srcText, String destText, JTextArea outputTextArea, JProgressBar progressBar) {
        String zipFilePath = srcText;
        String destDirectory = destText;
        UnZip unzipper = new UnZip();
        File dir = new File(zipFilePath);
        File[] files = dir.listFiles();
        System.out.println(files.length);
        double pBarInt = (double) files.length / 100;
        int count = 1;
        System.out.println(count);
        if (null != files) {
            for (int fileIntList = 0; fileIntList < files.length; fileIntList++) {
                System.out.println("coun in vlocj " + count);
                String ss = files[fileIntList].toString();
                if (null != ss && ss.length() > 0) {
                    try {
                        if (files[fileIntList].isDirectory())
                            continue;
                        unzipper.unzip(zipFilePath + ss.substring(ss.lastIndexOf("\") + 1, ss.length()), destDirectory,
                                outputTextArea);
                        if ((fileIntList + 1) % pBarInt == 0) {
                            progressBar.setValue(count);
                            progressBar.update(progressBar.getGraphics());
                            count += 1;
                        }

                    } catch (Exception ex) {
                        ex.printStackTrace();
                    }
                }
            }
        }
    }

此处files.length的值为25。

我的问题是,因为有 25 个文件,其中 1% 将是 2.5%,我可以将我的进度条增加为每 4 个文件处理为 10%,或者我可以在处理文件时显示 2.5%。

如果 files.length 大于 100,我可以做到,但无法理解小于 100 的文件。

请告诉我如何完成此操作。

谢谢

您可能只需要正确设置最大值。例如:

progressBar.setMaximum(files.length);

首先要只获取文件而不是目录,请执行以下操作:

File[] files = dir.listFiles(new FilenameFilter() {   
    @Override
    public boolean accept(File file, String name) {
        return !file.isDirectory();
    }
});

我会这样写:

File[] files = dir.listFiles(new FilenameFilter() {   
    @Override
    public boolean accept(File file, String name) {
        return !file.isDirectory();
    }
});
progressBar.setMaximum(files.length);
for (int i = 0; i < files.length; i++) {
    File f = files[i];
    try {
       unzipper.unzip(f.getAbsolutePath(), destDirectory, outputTextArea);
       progressBar.setValue(i);
       progressBar.update(progressBar.getGraphics());
   } catch (Exception ex) {
      ex.printStackTrace();
   }
}

并且您可能希望在线程中分派它。请参阅对您的问题的评论。

不确定为什么需要这个条件(fileIntList + 1) % pBarInt == 0

您应该将进度条计数设置为文件总数的百分比。尝试使用

progress.setValue(100);
....
int progressBarValue = count * 100/files.length;
progressBar.setValue(progressBarValue);

为准确起见,请使用正确的 files.length - 忽略目录。