Java by API/org.eclipse.jface.operation/IRunnableWithProgress

Материал из Java эксперт
Перейти к: навигация, поиск

implements IRunnableWithProgress

   <source lang="java">

import java.lang.reflect.InvocationTargetException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.dialogs.ProgressMonitorDialog; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.jface.window.ApplicationWindow; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.ruposite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; public class MainClass extends ApplicationWindow {

 public MainClass() {
   super(null);
 }
 public void run() {
   setBlockOnOpen(true);
   open();
   Display.getCurrent().dispose();
 }
 protected void configureShell(Shell shell) {
   super.configureShell(shell);
   shell.setText("Show Progress");
 }
 protected Control createContents(Composite parent) {
   Composite composite = new Composite(parent, SWT.NONE);
   composite.setLayout(new GridLayout(1, true));
   final Button indeterminate = new Button(composite, SWT.CHECK);
   indeterminate.setText("Indeterminate");
   Button showProgress = new Button(composite, SWT.NONE);
   showProgress.setText("Show Progress");
   final Shell shell = parent.getShell();
   showProgress.addSelectionListener(new SelectionAdapter() {
     public void widgetSelected(SelectionEvent event) {
       try {
         new ProgressMonitorDialog(shell).run(true, true, new LongRunningOperation(indeterminate
             .getSelection()));
       } catch (InvocationTargetException e) {
         MessageDialog.openError(shell, "Error", e.getMessage());
       } catch (InterruptedException e) {
         MessageDialog.openInformation(shell, "Cancelled", e.getMessage());
       }
     }
   });
   parent.pack();
   return composite;
 }
 public static void main(String[] args) {
   new MainClass().run();
 }

} class LongRunningOperation implements IRunnableWithProgress {

 private static final int TOTAL_TIME = 10000;
 private static final int INCREMENT = 500;
 private boolean indeterminate;
 public LongRunningOperation(boolean indeterminate) {
   this.indeterminate = indeterminate;
 }
 public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
   monitor.beginTask("Running long running operation", indeterminate ? IProgressMonitor.UNKNOWN
       : TOTAL_TIME);
   for (int total = 0; total < TOTAL_TIME && !monitor.isCanceled(); total += INCREMENT) {
     Thread.sleep(INCREMENT);
     monitor.worked(INCREMENT);
     if (total == TOTAL_TIME / 2)
       monitor.subTask("Doing second half");
   }
   monitor.done();
   if (monitor.isCanceled())
     throw new InterruptedException("The long running operation was cancelled");
 }

}

      </source>