Buttons während einer Berechnung deaktivieren

ebay83

Neues Mitglied
Hallo,

ich habe ein kleines Problem. Ich führe einige Berechnungen durch, die längere Zeit in Anspruch nehmen können. Daher wollte ich jetzt, nachdem eine Berechnung gestartet wurde, einfach die Buttons nicht mehr klickbar machen. Dazu setze ich einfach die Eigenschaft .setEnabled auf false und nach der Berechnung wieder auf true.

Jedoch werden die Buttons einfach nicht ausgegraut, obwohl dies die erste Operation ist, die ich aufrufe...

Hat vielleicht jemand eine Idee, woran das liegen könnte?
 
Die Berechnung muss in einem eigenen Thread laufen, und das Enablen/Disablen muss trotzdem auf dem EDT gemacht werden. Schau dir mal die Klasse "SwingWorker" an: Die macht die Berechnung im eigenen Thread. Bevor man den startet kann man den Button disablen, und in der "done"-Methode den Button wieder enablen.
 
Habe jetzt auf die schnelle die Variante von theuserbl umgesetzt und dies läuft.

Gibt es etwas, was dagegen sprechen könnte, dies so zu machen und man lieber dieses SwingWorker nutzen soll?
 
Eigendlich nein. Er ist imho logischer aufgebaut, da es einen Punkt gibt von denen er die Methoden aufruft (run, done), wärend der Thread in der run (bis auf die Fälle, wo sich eine eigene Klasse mehr auszahlt) noch eine oder mehrere anonyme Klassen aufruft, wodruch eine nicht so hübsche Verschachtelung entsteht.
 
Das wichtige Argument für den SwingWorker ist die Möglichkeit vom Hintergrund-Thread die Fortschritte der Aufgabe an die Oberfläche EDT durch zu reichen. Das wird oft für ProgressBar und/oder Meldungstexte genutzt, die den Fortschritt des Hintergrund-Threads für den wartenden Benutzer beschreiben (userfriendly!).
 
Ich persönlich habe den Swingworker noch nie angefasst.
Macht der irgendwas anders, ausser einen seperaten Thread zu starten und am Ende die EDT-Aktion mit invokeLater auszuführen?
 

Neue Themen


Zurück
Oben