2012-04-03 2 views
1

Ich schreibe ein Ereignis für button.In, ich habe Swingworker in der Art, dass ich execute-Methode in diesem Tastencode verwenden verwendet.Alles funktioniert gut, aber das Problem ist, dass ich will um ein Panel anzuzeigen, unmittelbar nachdem die execute-Methode beendet ist. Was passiert, ist, dass panel erscheint, bevor die execute-Methode ihre Aufgabe beendet.Hier ist mein code.Kindly hilft mir, wie man das Panel anzeigt, sobald die execute-Methode mit ihrer AufgabePanel vor SwingWorker execute-Methode beendet seine Aufgabe

beendet ist
   Main f2=new Main(); 
       f2.getfile(FileName,0); 
       f2.execute(); 
       Panel.setVisible(true); 
       Panel.setSize(815, 587); 

bearbeitet: Nun, ich eine Lösung gefunden haben, ist dies für, wenn jemand die gleichen problem.I steht vor einer Methode erstellt haben (nennen wir es showPanel) in GUI-Klasse, und wenn der Swingworker metho getan d heißt dann in dieser done-Methode rufe ich die showPanel-Methode zum Anzeigen des Panels auf.

+0

würde die Panel-Erstellung am Ende der execute() -Methode nicht hinzufügen? –

+0

@JimmyGustafsson Panel erscheint, bevor die execute-Methode mit ihrer Aufgabe – Xara

+0

fertig ist, bitte lernen Sie Java-Namenskonventionen und bleiben Sie dabei – kleopatra

Antwort

2

Die SwingWorker führt ihre Arbeit in einem anderen Thread (genannt Arbeiter-Thread in der Klasse Javadoc) dann die EDT, und ermöglicht es, den Event Dispatch Thread während/nach seiner Ausführung zu aktualisieren.

Der Grund, warum Ihr Panel, bevor das Verfahren beendet hat eindeutig auszuführen sichtbar wird in der class Javadoc of the SwingWorker Klasse genannt wird, die ein must-read ist: auf diesem Thread genannt wird

Die Methode execute(). Es Pläne Swingworker für die Ausführung auf einem Worker-Thread und kehrt sofort

this answer Siehe Beispiel Verwendung eines SwingWorker oder die Swing concurrency tutorial für weitere Informationen konsultieren.

+0

_SwingWorker führt seine Hintergrundaufgabe auf dem EDT aus und blockiert Ihre UI_ ehhh ... nein. Das Execute kann von _any_ thread aufgerufen werden (lies einfach deine Zitate, mit Betonung auf _schedules_ und _worker thread_ :) Es blockiert nicht den aufrufenden Thread, was @Zara beobachtet: die Codezeile unterhalb von execute() 'ist sofort ausgeführt – kleopatra

+0

@kleopatra Sie haben völlig Recht. Ich hatte eine andere (falsche) Version dieser Antwort, bevor ich sie gepostet habe, und dachte, dass ich alles nach dem Lesen des SwingWorker Javadocs korrigiert habe. Das Verhalten, das ich beschrieben habe, tritt wahrscheinlich auf, wenn Sie die run-Methode iso die execute-Methode aufrufen. Ich habe die falschen Teile aus meiner Antwort entfernt – Robin

Verwandte Themen