Zum Inhalt springen

Obwohl EDT - anzeige wird nicht aktualisiert


danvan

Empfohlene Beiträge

hallo,

also ich lasse einen swingworker ein paar aufgaben erledigen, am ende soll dann kurz im ladefenster ein label eingeblendet werden, das anzeigt: "Beendet", und der thread wird 2 sekunden unterbrochen.

der entsprechende code, der sich auf die änderung der oberflöäche bezieht, ist in der done()-methode des workers, die im EDT ausgeführt wird.

ich habe auch sicherheitshalber en abfrage gemacht, liefert true, also ist im EDT. ich habe es auch manuell versucht, um fehlprogrsmmierung meinerseits auszuschließen.

warum wird die anzeige trotzdem nicht aktualisiert, wenn ind er done-methode soetwas steht wie:

jLabel2.setVisible(true);

?

lg

Link zu diesem Kommentar
Auf anderen Seiten teilen

hallo, ja das habe ich auch schon versucht. Allerdings sollte doch bei


jLabel2.setVisible(true);

das sowieso neu gezeichnet werden, oder? hier ist mal der code, bei klick wird halt die actionPerformed aufegrufen. Season ist ne Fachkonzeptklasse, ProgressView ist einfach s ein fenster mit progressbar und nem Label "beendet", das aber unsichtbar ist.
public void actionPerformed(ActionEvent evt) 

				{

[...]


newSeason = new Season(1,teams.toArray(new String[18]));

view = new ProgressView(identity,newMainAppFrame());				

new SeasonPlanWorker(parent, newSeason, view).execute();

// der worker berechnet für ne teamliste einen saisonspielplan.

[...]

}


// hier der code aus dem worker


public class SeasonPlanWorker extends SwingWorker<Void, Void>

{

  private Season season;

  private ProgressView view;

  private final TableManagerDialog diag;



	public SeasonPlanWorker(TableManagerDialog main, Season s, ProgressView view)

	{

		super();

		this.season = s;

		this.view = view;

		this.diag = main;

	}


	@Override

	protected Void doInBackground() throws Exception

	{

    view.setVisible(true); // die arbeit beginnt: ladefenster wird angezeigt

		SeasonPlanner.createPlan(season);

		return null;

	}


	@Override

   protected void done()

   {

		System.out.println("Ende"); // überprüft: wird ausgeführt

System.out.println( SwingUtilities.isEventDispatchThread() ); // wie erwartet true


view.taskEnded(); // enthält nur die sichtbarmachung des labels "Beendet"

[...] //  <-- enthält nur einen try-catch-block, der den thread 1 sekunde anhält, damit man das erschienene label noch ne sekunde sieht.

diag.setVisible(false); // dann wird der dialog unsichtbar gemacht, mit ihm auch das ladefenster


   }


}


				 

ich hoffe, das hilft, danke für die mühe...

Bearbeitet von danvan
Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...