Zum Inhalt springen

Obwohl EDT - anzeige wird nicht aktualisiert


Empfohlene Beiträge

Geschrieben

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

Geschrieben (bearbeitet)

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
Geschrieben

ok, danke. Darf ich den Grund erfahrren, nützt ja nichts, die Erkenntnis einfach auswendig zu lernen ;)

ich probiere es mal damit...

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

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...