folgendes möchte ich für mein programm sicherstellen:
1. nicht mehrere useraktionen gleichzeitig.
2. keine aktionen während gui-aktualisierung.
3. keine aktualisierung während einer aktion.
derzeit synchronisiere ich mit einem simplen objekt, auf das eben synchronized zugegriffen wird. das bedeutet, dass zb ein mouseClicked(..) synchronisierten zugriff auf das objekt benötigt und nicht parallel zu einem actionPerformed(..) abgearbeitet werden kann.
ich frage mich jetzt, wie ich es mit der model/gui-aktualisierung halte. am einfachsten erscheint es mir, wenn man schon VOR der modelaktualisierung ebenfalls zugriff auf das zentrale synchobjekt benötigt. andererseits erscheint es mir sehr falsch, dass der view einfluss darauf hat, wann das model (von außen) aktualisiert werden darf.
folglich sollte ich die synchronisation wohl erst in den update-methoden der GUI machen oder? hätte es hier nun Vorteile, dies mit SwingUtilities.invokeLater() bzw. invokeAndWait() zu lösen?
natürlich kann es dann sein, dass sich die Daten im Model parallel zur Ausführung einer vom User (über die GUI) ausgelösten Aktion verändern (das Model kann in meinem Fall wie gesagt von anderer Stelle aus auch modifiziert werden): zb könnte ein GUI-Objekt, mit dem der User etwas tun möchte, im Model bereits entfernt worden sein (in der GUI aber eben noch nicht). Ist es üblich, dass man die Fehlerbehandlung dafür in den Controller packt? (und dann in der GUI ggf. Fehlermeldungen anzeigen lässt?)
1. nicht mehrere useraktionen gleichzeitig.
2. keine aktionen während gui-aktualisierung.
3. keine aktualisierung während einer aktion.
derzeit synchronisiere ich mit einem simplen objekt, auf das eben synchronized zugegriffen wird. das bedeutet, dass zb ein mouseClicked(..) synchronisierten zugriff auf das objekt benötigt und nicht parallel zu einem actionPerformed(..) abgearbeitet werden kann.
ich frage mich jetzt, wie ich es mit der model/gui-aktualisierung halte. am einfachsten erscheint es mir, wenn man schon VOR der modelaktualisierung ebenfalls zugriff auf das zentrale synchobjekt benötigt. andererseits erscheint es mir sehr falsch, dass der view einfluss darauf hat, wann das model (von außen) aktualisiert werden darf.
folglich sollte ich die synchronisation wohl erst in den update-methoden der GUI machen oder? hätte es hier nun Vorteile, dies mit SwingUtilities.invokeLater() bzw. invokeAndWait() zu lösen?
natürlich kann es dann sein, dass sich die Daten im Model parallel zur Ausführung einer vom User (über die GUI) ausgelösten Aktion verändern (das Model kann in meinem Fall wie gesagt von anderer Stelle aus auch modifiziert werden): zb könnte ein GUI-Objekt, mit dem der User etwas tun möchte, im Model bereits entfernt worden sein (in der GUI aber eben noch nicht). Ist es üblich, dass man die Fehlerbehandlung dafür in den Controller packt? (und dann in der GUI ggf. Fehlermeldungen anzeigen lässt?)