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

问题描述:

我已经实现了SWT向导应用程序,在此应用程序中,我以编程方式执行解压缩文件,并且在解压缩期间需要一个进度条。如果您使用的是JFace的Wizard,你可以使用内置的进度监视器中,请找到解压下面的代码,需要在SWT向导中解压缩时的进度条由java

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); 
     } 
    } 
+0

你是什么意思是'SWT向导'?这是使用JFace'Wizard' /'WizzrdDialog' /'WizardPage'类(它有一个内置的进度监视器),还是只是简单的'SWT'? –

+0

在SWT项目中使用wizardDialog – Biswabir

+0

感谢您的回复,如果我扩展了WizardPage类,那怎么可能。 – Biswabir

向导。

在你的向导类调用构造函数:

setNeedsProgressMonitor(true); 

要显示正在进行的呼叫

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

此调用可以在WizardWizardPage

其中runnable是实施IRunnableWithProgress的类。这个类的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(); 
    } 
} 
+0

它的工作非常感谢... – Biswabir

+0

如果我在开始任务100中设置工作步骤并在此之后使用monitor.worked(100),我有问题否定进度条。在解压缩进度条时显示100,然后完成解压缩功能。 – Biswabir

+0

如果你想取得进展,表明你必须在每一位之后以小数位完成调用“工作”的工作。如果你不能做到这一点,你不能有动画进展。 –