Veröffentlicht 25. Juli 200916 j 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
29. Juli 200916 j Ohne konkreten Code läuft das sehr auf Glaskugelanalyse hinaus. Als Idee: Schon versucht einen expliziten repaint bzw. validate auszulösen?
29. Juli 200916 j 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 29. Juli 200916 j von danvan
29. Juli 200916 j Ich würde nie bei einem JLabel setVisible aufrufen... setText() sollte vollkommen ausreichen.
29. Juli 200916 j ok, danke. Darf ich den Grund erfahrren, nützt ja nichts, die Erkenntnis einfach auswendig zu lernen ich probiere es mal damit...
30. Juli 200916 j Darf ich den Grund erfahrrenKann ich aus dem Bauch nicht erklären, findet sich aber bestimmt beim Studium hier: http://java.sun.com/docs/books/tutorial/uiswing/
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.