# Service nicht abbrechen



## Gast2 (16. Okt 2008)

Hallo,

gibt es eine Möglichkeit dass ich einen Job nicht abbrechen kann???Also dass der rote abbrechen button nichts macht bzw. ausgeblendet ist....???


----------



## Gast2 (5. Nov 2008)

Hallo,


```
final Job mJob = new Job(SAVE_JOB)
    {
      protected IStatus run(IProgressMonitor m)
      {
        final IStatus status = Status.OK_STATUS;
          try
          {
            m.beginTask(SAVE_JOB, IProgressMonitor.UNKNOWN);
            save();
          }
          finally
          {
            m.done();
          }
        return status;
      }
    };
    mJob.setUser(true);
    mJob.schedule();
```

also soweit hab ich es nur wie kann ich jetzt den abbrech button und den im hintergrundlaufen ausblenden /disablen??....

oder muss ich einen JobListener adden und während der running methode selber einen dialog darstellen????

Mein Ziel ist einfach nur dass man den Job nicht beenden kann und in der GUI solange nichts gemacht werden kann bis der Job beendet ist... Hab ich den falschen Ansatz oder ist das nicht möglich????


----------



## Wildcard (5. Nov 2008)

Nicht mit Jobs, nein. Du kannst theoretisch einen Hintergrundjob (system) verwenden den der User nicht zu gesicht bekommt und einen Pseudo Job der die Progressbar anzeigt. Die Buttons kannst du allerdings nicht entfernen.
Ansonsten, verwende eben einen ProgressMonitorDialog.


----------



## Gast2 (5. Nov 2008)

mhm okay ich benutz die methode zum speichern...


```
public void doSave(final IProgressMonitor monitor)
{
          try
          {
            monitor.beginTask(SAVE_JOB, IProgressMonitor.UNKNOWN);
            save();
          }
          finally
          {
            monitor.done();
          }
}
```
damit kann ich es ja auch hinbekommen oder???

Meine Frage ist woher bekomm ich bzw. wie lege ich so einen IProgressMonitor an wenn ich z.B. auf einen Button klicke und diese Methode aufrufen will???

ist das richtig ?? 

final IProgressMonitor monitor = new ProgressMonitorDialog(getSite().getShell()).getProgressMonitor();
doSave(monitor );


----------



## Gast2 (5. Nov 2008)

das hier klappt leider nicht es wird kein dialog angezeigt

```
@Override
public void doSave(IProgressMonitor monitor) {
    monitor.beginTask("Running long running operation",
            IProgressMonitor.UNKNOWN);
        for (int total = 0; total < 100000 ;total++) {
    		//Thread.sleep(1);
    		System.out.println("test");

          //monitor.worked(INCREMENT);     
        }
        monitor.done();
}
```

das hier klappt hingegen stimmt das so??

```
public void doSave(IProgressMonitor monitor) {

	
	try {
		new ProgressMonitorDialog(getSite().getShell()).run(true, true,
				new LongRunningOperation());
	} catch (InvocationTargetException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (InterruptedException e) {
	class LongRunningOperation implements IRunnableWithProgress 
{
	  /**
	   * Runs the long running operation
	   * 
	   * @param monitor the progress monitor
	   */
	  public void run(IProgressMonitor monitor) {
	    monitor.beginTask("Running long running operation",
	        IProgressMonitor.UNKNOWN);
	    for (int total = 0; total < 100000 ;total++) {
			//Thread.sleep(1);
			System.out.println("test");

	      //monitor.worked(INCREMENT);     
	    }
	    monitor.done();
	  }
	}

}	// TODO Auto-generated catch block
		e.printStackTrace();
	}
}
```

sowas hier such ich

www.java-forum.org/de/userfiles/user10343/save.JPG


----------



## foobar (6. Nov 2008)

Es gibt auch einen IProgressService:


```
IRunnableWithProgress op = new IRunnableWithProgress()
            {
                @Override
                public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException
                {
                    monitor.beginTask("Erstelle Zahlungseinträge", IProgressMonitor.UNKNOWN); //$NON-NLS-1$
                    Controller.getInstance().addPayments(allPayments);
                    updateViewsAndEditor();
                    monitor.done();
                }  
            };
            
            IProgressService progress = PlatformUI.getWorkbench().getProgressService();
            
            try
            {
                progress.run(true, false, op);
            }
            catch(InvocationTargetException ex)
            {
                Controller.showErrorDialog(Messages.getString("PaymentDialog.msgErrorCreatingPayments"), ex); //$NON-NLS-1$
            }
            catch (InterruptedException ex)
            {
                Controller.showErrorDialog(Messages.getString("PaymentDialog.msgErrorCreatingPayments2"), ex); //$NON-NLS-1$
            }
```

Das Resultat ist wohl identisch.


----------



## Guest (6. Nov 2008)

ok thanks ich hab den flag cancelable falsch gesetzt ... logisch wenn ich ihn auf false setze klappts ...


----------

