![]() |
|
|
Themen-Optionen |
|
|
Nach oben #1 |
|
Benutzer
Registriert seit: 13.08.2005
Beiträge: 67
|
Hi,
Ich müßte auf die Reihenfolge der NotifyObserver Klasse einfluß nehmen. In der API steht nur knapp nicht dokumentiert. Kennt sich da jemand aus? Ich müsste zur Laufzeit Observer zufügen die aber bei Änderungen vor einer Klasse aufgerufen werden die zu Programmstart gleich angefügt wird. |
|
|
|
|
|
Nach oben #2 |
|
Benutzer
Registriert seit: 15.11.2005
Beiträge: 75
|
Aus der Observable-Dokumentation:
" The order in which notifications will be delivered is unspecified. The default implementation provided in the Observable class will notify Observers in the order in which they registered interest, but subclasses may change this order, use no guaranteed order, deliver notifications on separate threads, or may guarantee that their subclass follows this order, as they choose." Man kann also beim Registrieren eines Observers nicht erzwingen, dass dieser vor oder nach einem anderen Observer getriggert wird. Hast Du eine Referenz auf den beim Programmstart registrierten Observer? Wenn das so ist, dann kannst Du ihn mit deleteObserver deregistrieren. Wenn Du Dich - entgegen der Empfehlung aus der Doku - darauf verlässt, dass Du es mit einer Default-Implementierung von Observable zu tun hast, dann kannst Du den alten Observer entfernen, dann Deinen neuen einhängen und dann den alten wieder hinzufügen. Besser wäre es aber, sich nicht auf die Reihenfolge zu verlassen, sondern den alten Observer zu entfernen, ihn dem neuen Observer als Parameter mitzugeben und dann am Ende der update-Methode des neuen Observers einfach direkt update() des alten mitzugeben. |
|
|
|
|
|
Nach oben #3 |
|
Neuer Benutzer
Registriert seit: 22.11.2005
Beiträge: 8
|
Warum soll denn eine Reihenfolge festgelegt sein? Das hat nix mit Observer o.ä. zu tun! Es geht hierbei nur um die Verteilung der Information, dass es eine Änderung gibt. Jede Klasse muss/kann individuell darauf reagieren... unabhängig davon, ob man als 1. oder als 10. die Info bekommen hat!
|
|
|
|
|
|
Nach oben #4 |
|
Benutzer
Registriert seit: 13.08.2005
Beiträge: 67
|
Wenn ich aber in der ersten Klasse die reagiert ein Fenster Modal öffne dann wird der Programmablauf unterbrochen und erst weitergeführt wenn das modale Fenster weider geschlossen wird.
Also wird die zweite Klasse erst danach informiert. Ich möchte aber dass die Zweite Klasse im Popup dargestellt wird Also sollte diese ebenfals reagieren und erst dann das Popup geöffnet werden. Leider kennen sich die beiden Klassen nicht. Deshalb wäre die Reihenfolge wichtig. |
|
|
|
|
|
Nach oben #6 |
|
Benutzer
Registriert seit: 13.08.2005
Beiträge: 67
|
Da bin ich wieder
Danke für die Hilfe! Ich habe einen Hauptframe in dem die verschiedenen Komponenten meiner Software angeordnet werden. Dieser Übernimmt das Anzeigen der richtigen Komponenten sowie die Steuerung welche Elemente Enabled oder Disabled sind. In manchen Fällen habe ich auf dieser Komponente eine JTable plaziert. Wenn ich jetzt einen neuen Datensatz hinzufügen will dann wird ein Popup geöffnet (Singleton Pattern) und eine Maske (abhängig davon welche Tabelle gerade bearbeitet wird) eingebunden. Mein Problem: Wegen der Programmstruktur ist der Ansichtskontroller der erste der als Observer registriert wird. Zu einem Späteren Zeitpunkt werden die Controller der verschiedenen Datensätze registriert. Möchte ich nun einen Datensatz bearbeitenso löse ich ein entsprechendes Event aus wodurch alle Observer der Reihe nach informiert sind. Um ein Modales Popup anzuzeigen setze ich dieses im Ansichtskontroller auf setVisible(true). Hierdurch wird der Programmablauf unterbrochen bis das Modale fenster wieder geschlossen wird. Erst danach werden die weiteren Observer informiert, unter Anderem auch der welcher für das Laden der Daten aus der Datenbank zuständig ist. Ich habe das Ganze jetzt so gelöst dass ich die Observer zwei mal informiere. Einmal darüber das ein neuer Datensatz eingetragen werden soll und ein zweites mal darüber dass die Masken jetzt angezeigt werden sollen. Wäre es möglich die Reihenfolge der Observer zu steuern so könnte man dies sauberer lösen. |
|
|
|
![]() |
| Lesezeichen |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
| Themen-Optionen | |
|
|
Ähnliche Themen
|
||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Textfelder auf verschiedenen Tabs per Observer synchronisieren | Sayang | Desktop-Applikationen und Grafik | 2 | 05.12.2005 19:14 |
| Observer Problem, oder: Java und Eclipse wollen mich verar...! | Robinson | Eclipse | 6 | 24.11.2005 09:20 |
| JInternalFrame und Canvas bezüglich Reihenfolge | Hot-Thunder | Desktop-Applikationen und Grafik | 10 | 06.07.2005 20:56 |