2017-06-06 5 views
0

Ich muss Swinger unterbrechen, aber wenn der Thread ein Fragment läuft, sollte es danach unterbrechen. Etwas wie folgt aus:Java - vor Interrupt schützen SwingWorker

public class worker extends SwingWorker<Integer, String>{ 
    //(...) constructors and everything else 

    protected Integer doInBackground() throws Exception{ 
     //Code that can be interrupted 
     while(true){ 
      //(...) more code that can be interrupted 

      //This shouldn't be interrupted, has to wait till the loop ends 
      for(int i=0; i<10; i++){ 

      //(...) more code that can be interrupted 
     }    
    } 
} 

Unterbrechung der Arbeiter mit:

Worker worker = new Worker(); 
worker.execute(); 
worker.cancel(true); 

Ich habe synchronisierte Blöcke versucht, aber nicht sicher, ob das nicht oder ich bin einfach funktioniert es falsch zu machen.

Gibt es einen Weg? Vielen Dank!

+0

Wie in [diese Antwort] (https://stackoverflow.com/a/671053/4756299) erwähnt, unterbrechen Sie einen Thread nicht. Sie beenden den Thread in einer kontrollierten Art und Weise. –

Antwort

0

Jede Möglichkeit, die Sie entweder durch eine Flagge steuern können, die den Thread regelmäßig überprüfen wird. So vor dem Start können Sie die Flagge überprüfen oder unterbrechen und dann fortfahren.

Make-Flagge als flüchtig, so wird es auf alle Gewinde oder AtomicBoolean

while (flag) { 
     //do stuff here 
    } 

oder Sie Interrupt sichtbar sein können, die Aufgabe zu löschen.

try { 
     while(!Thread.currentThread().isInterrupted()) { 
     // ... 
     } 
    } catch (InterruptedException consumed) 

    } 
Verwandte Themen