java 在 SWT 向导中解压时需要进度条

Need progress bar at the time of unzip in SWT wizard by java

我已经实现了 SWT 向导应用程序,在此应用程序中,我以编程方式执行了解压缩文件,并且在解压缩过程中需要一个进度条。请找到下面的解压代码,

 public static void extract(File zipfile, File outdir)
      {
        try
        {
          ZipInputStream zin = new ZipInputStream(new FileInputStream (zipfile));
          ZipEntry entry;
          String name, dir;
          while ((entry = zin.getNextEntry()) != null)
          {
            name = entry.getName();
            if( entry.isDirectory() )
            {
              mkdirs(outdir,name);
              continue;
            }
            /* this part is necessary because file entry can come before
             * directory entry where is file located
             * i.e.:
             *   /foo/foo.txt
             *   /foo/
             */
            dir = dirpart(name);
            if( dir != null )
              mkdirs(outdir,dir);

            extractFile(zin, outdir, name);

          }

          zin.close();
        } 
        catch (IOException e)
        {
          e.printStackTrace();
        }
      } 

在向导页面我这样调用这个方法,

    btnUnzip.addListener(SWT.Selection, new Listener() {

            @Override
            public void handleEvent(Event event) {

                    File file = new File(text.getText());
                    File file1 = new File(textToSaveUnzipFile.getText());
                    UnzipUtility.extract(file, file1);
      }
   }

如果您使用的是 JFace Wizard,您可以在向导中使用内置的进度监视器。

在向导的构造函数中 class 调用:

setNeedsProgressMonitor(true);

显示进度调用

getContainer().run(true, true, runnable);

此调用可以在 WizardWizardPage 中。

其中 runnable 是 class 实现 IRunnableWithProgress。此 class 的 run 方法将类似于:

@Override
public void run(final IProgressMonitor monitor)
  throws InterruptedException
{
  monitor.beginTask("Title", .. number of work steps ..);

  try
   {
     while (not finished) {
        ... do a small amount of work

        // Update progress
        monitor.worked(1);
     }
   }
  finally
   {
     monitor.done();
   }
}