2017-07-04 1 views
0

J'ai implémenté l'application d'assistant SWT, Dans cette application j'ai effectué un programme de décompression par programme et j'ai besoin d'une barre de progression pendant unzip. S'il vous plaît trouver le code ci-dessous pour dézipper,Besoin de barre de progression au moment de décompresser dans l'assistant SWT par 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(); 
     } 
     } 

Sur la page de l'assistant j'appelle cette méthode comme celui-ci,

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

Que voulez-vous dire être « assistant SWT »? Est-ce en utilisant les classes JFace 'Wizard' /' WizzrdDialog'/'WizardPage' (qui ont un moniteur de progression intégré) ou est-ce simplement' SWT'? –

+0

en utilisant wizardDialog dans le projet SWT – Biswabir

+0

Merci pour votre réponse, Si je prolonge la classe WizardPage, comment est-ce possible. – Biswabir

Répondre

0

Si vous utilisez un JFace Wizard vous pouvez utiliser le moniteur intégré de progrès dans la sorcier.

Dans le constructeur de votre appel de classe Assistant:

setNeedsProgressMonitor(true); 

Pour afficher l'appel de progression

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

Cet appel peut être dans le Wizard ou WizardPage.

où est une classe implémentant IRunnableWithProgress. La méthode run de cette classe ressemblera à quelque chose comme:

@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

Cela a fonctionné merci beaucoup ... – Biswabir

+0

J'ai la barre de progression de la question reagarding, si je définis les étapes de travail dans la tâche de début 100 et après que j'ai utilisé monitor.worked (100). au moment de décompresser barre de progression montrant 100 avant d'avoir terminé la fonctionnalité de décompression. – Biswabir

+0

Si vous voulez que le progrès montre que vous devez faire le travail en petits morceaux appelant «travaillé» après chaque bit. Si vous ne pouvez pas faire cela, vous ne pouvez pas avoir de progrès animé. –