增加进度条百分比

时间:2015-11-18 14:26:36

标签: java swing jprogressbar

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

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%,我可以为处理为10%的每4个文件增加进度条,或者只要文件处理完就可以显示2.5%。

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

请让我知道如何完成这项工作。

由于

2 个答案:

答案 0 :(得分:1)

您可能只需要正确设置最大值。 E.g:

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

你可能想在一个帖子中发送它。查看有关您问题的评论。

答案 1 :(得分:0)

不确定为什么需要这种情况(fileIntList + 1) % pBarInt == 0

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

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

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