Swing: JButton kann nicht aktualisiert werden - repaint () funktioniert nicht

7

Ich verwende Swing zum ersten Mal, um eine einfache GUI zu erstellen. Es besteht aus einem JFrame , auf das ich einen einzelnen JButton gelegt habe, der beim Anklicken einen anderen Code aufruft, der ca. 3 Sekunden, um zurückzukehren.

Kurz vor dem Aufruf dieses Codes, in actionPerformed() , möchte ich den Text auf der Schaltfläche aktualisieren, um den Benutzer über die Verarbeitung zu informieren. Mein Problem ist, dass der Text auf der Schaltfläche erst aktualisiert wird, nachdem der 3-Sekunden-Aufruf zurückgegeben wurde. Ich möchte, dass der aktualisierte Text während des Anrufs angezeigt wird. Anschließend werde ich ihn später ändern.

Das Aufrufen von repaint() auf JButton macht nichts und ruft es in den JFrame Ergebnissen auf, wenn " Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException " beim Klicken auf die Schaltfläche ausgelöst wird.

    
William 10.06.2009, 19:40
quelle

2 Antworten

15

Was passiert, ist, dass der 3-Sekunden-Code im GUI-Thread ausgeführt wird, so dass die Schaltfläche keine Möglichkeit hat, sie zu aktualisieren, bis sie fertig ist.

Um dies zu lösen, starten Sie eine SwingWorker Aufgabe die langwierige Operation; dann ist es immer noch frei, Dinge in der GUI zu tun, während Sie darauf warten.

Hier sind ein Paar von Tutorials zu diesem Thema, und die oben genannten SwingWorker Javadocs haben ebenfalls einen Code.

Beispielcode

%Vor%     
Michael Myers 10.06.2009, 19:47
quelle
10

Das Problem hier ist, dass Ihre lange laufende Aufgabe den Thread blockiert, der normalerweise die GUI malen würde.

Der übliche Weg ist es, die länger laufende Aufgabe in einen anderen Thread zu verschieben.

Dies kann relativ einfach mit einem SwingWorker erfolgen .

Diese Frage kann auch hilfreiche Informationen liefern.

    
jjnguy 10.06.2009 19:46
quelle

Tags und Links