Announcement

Collapse
No announcement yet.

SwingWorker abbrechen

Collapse
This topic is closed.
X
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • SwingWorker abbrechen

    Hallo,

    Folgender SwingWorker befüllt ein Formular mit daten und Bildern aus dem Internet:

    Code:
    public class ImportDataSwingWorker extends SwingWorker<String, String> {
    
    	AddFilmDialogController addFilmDialogController;
    
    
    	/**
    	 * Übergibt den Formularcontroler
    	 * 
    	 * @param addFilmDialogController
    	 *            Controller
    	 */
    	public ImportDataSwingWorker( AddFilmDialogController addFilmDialogController ) {
    
    		this.addFilmDialogController = addFilmDialogController;
    	}
    
    
    	/**
    	 * Ausführung der Aufgabe
    	 */
    	@Override
    	protected String doInBackground() throws Exception {
    
    		addFilmDialogController.disableDialog();
    
    		if ( addFilmDialogController.isImportFieldEmpy() ) {
    			addFilmDialogController.setImportError( "Bitte geben Sie eine TMDb-ID ein!" );
    		} else {
    			addFilmDialogController.setImportError( "" );
    			try {
    				addFilmDialogController.loadMovie();
    				addFilmDialogController.importData();
    			} catch ( IOException | ParserConfigurationException | SAXException e ) {
    				e.printStackTrace();
    			}
    		}
    
    		addFilmDialogController.enableDialog();
    
    		return null;
    	}
    
    
    }
    Während des Ladevorgangs wird ein Ladebildschrim angezeigt. Auf diesem Befindet sich ein Button der den Ladevorgang abbrechen soll! In diesem Fall soll der Swingworker gestopt und das Formular geleert werden. Der Button ruft folgende Methode auf:

    Code:
    	/**
    	 * Bricht den Importvorgang ab
    	 */
    	public void cancelImport() {
    
    		enableDialog();
    		importDataSwingWorker.cancel( true );
    		addFilmDialog.clearCover();
    		addFilmDialog.clearFields();
    		addFilmDialog.clearTables();
    		splashScreen.closeWindow();
    	}
    Wenn ich den Abbruchvorgang ausführe kommt folgende Konsolenausgabe:

    Code:
    INTERRUPTED while loading Image
    Alles was bis dahin geladen wurde, wird wie gewünscht geleert. Das ist das der SwingWorker nicht stoppt! Wenn z.B. Alle Textfelder befüllt und 10 von 15 geladen sind und ich den Abbruch betätige, werden die Textfelder geleert die 10 aus der Anzeige entfernt aber der SwingWorker arbietet weiter und läd noch die 5 verbleibenden Bilder. Egal wo ich den Abbruch betätige der SwingWorker führt den Rest seint Aufgabe aus.

    Ich habe bisher nur mit SwingWorkern gearbeitet, die von Anfang bis Ende laufen sollte. Das ist das erste mal das ich in einen Thread eingreifen will. Wie beende ich diesen korrekt und gehe sicher, dass das Leeren des Dialogs erst dann ausgeführt wird wenn der Worker auch korrekt beendet ist sodass auch alles gelöscht ist.

    Gruß

  • #2
    http://www.tutorials.de/swing-java2d...abbrechen.html

    http://www.java-forum.org/awt-swing-...abbrechen.html

    Du solltest dich daran orientieren wie man eine Thread sauber abbricht, aber da das in zig anderen Foren behandelt wird

    geschlossen
    Zuletzt editiert von Christian Marquardt; 07.09.2012, 07:17.
    Christian

    Comment

    Working...
    X