Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
nur mal so in den Raum gefragt, ist es evtl. sinnvoll, "M", "V" und "C" von vornherein als seperate Threads zu starten?(wobei die View ja eh im EDT läuft);
Ist das Glas nun halb voll oder halb leer? .... ich beantworte die Gegenfrage mal trozdem
Naja, zBsp. könnte der Controller gleich mal die Sitzungzeit stoppen, die Uhrzeit an die Viewschicken, man könnte die "längeren" Prozesse (zBsp. DB-Abfrage) im Controller ausführen ohne dort immer nen neuen Thread zu starten und nach Beendigung halt die View informieren.
Macht sicherlich nur Sinn, wenn man einen Zentralen Controller hat aber ich fände das schon praktisch.
Mit dem Model ists mir auch schleierhaft warum xD aber hätte ja vielleicht auch noch eine Idee hier kommen können.
Naja, zBsp. könnte der Controller gleich mal die Sitzungzeit stoppen, die Uhrzeit an die Viewschicken, man könnte die "längeren" Prozesse (zBsp. DB-Abfrage) im Controller ausführen ohne dort immer nen neuen Thread zu starten und nach Beendigung halt die View informieren.
Warum?
Wenn ich der View sage, zeichne mal folgendes neu, dann zeichnet sie folgendes neu o0.
Ich muss natürlich sicherstellen, dass die Daten entsprechend vorbereitet sind, da hat doch aber die View nix mit zu tun. Oder steh ich da jetzt auf dem Schlauch?
Warum?
Wenn ich der View sage, zeichne mal folgendes neu, dann zeichnet sie folgendes neu o0.
Ich muss natürlich sicherstellen, dass die Daten entsprechend vorbereitet sind, da hat doch aber die View nix mit zu tun. Oder steh ich da jetzt auf dem Schlauch?
Klar musst du dann synchroniseren. Wenn dein Controller in einem anderen Thread arbeitet und du von dem aus sagst he zeichne dich mal neu, musstdu sicherstellen dass die View in dem richtigen (UI)Thread neugezeichnet wird.
Mal angenommen der Controller läuft in einem separaten Thread (was auch immer das heißen mag) und die View im EDT:
Wie bekommst Du die Events aus der View an den Controller in dessen Thread?
Aktionen aus der View auch wenn sie im Controller ausgeführt werden laufen im EDT.
Naja, ich hatte ein wenig im netz geforscht, und dieses Thema halt in einigen englischen Forendiskusionen ohne wirkliche Ansätze einer Klärung des Problems gelesen.
Ich fand die Idee recht interressant, und wollte mich erkundigen.
Mit den neuen Infos, ist es wohl wenig sinnvoll, danke für eure Hilfe.
Wenn man mehrere Threads hast die gemeinsame Schnittstellen besitzen hat man immer die Synchronisationproblematik. Daher finde ich es einfacher und sicherer Threads bedarfsgerecht und bewußt einzusetzen.
Solche "getrennten" Ansätz sind sicherlich möglich. Meiner Meinung aber viel zu komplex und fehleranfällig - eventuell gibt's da ja irgendwelche Frameworks die sowas unterstützen, ich kenne keine. (was nichts heißen muss ;-))
Man kann das machen. Ein sinnvolles Hilfsmittel ist dabei ein Publish-Subscribe-Pattern mit einem EventDispatcher. D.h. deine Anwendung feuert Events, sobald sich an einer Stelle irgendwas geaendert hat (z.B. Button wurde gedrueckt, Berechung wurde beendet, etc), die von einem EventHandler "gefangen" und verarbeitet werden. Ein solcher Handler kann dabei in einem beliebigen Thread laufen.
Bisschen Pseudocode:
Java:
button.addActionListener( new ActionListener() {
public void actionPerformed(..) {
eventDispatcher.publishEvent( new StartCalculation() );
}
});
edtHandler.handleEvent( RedrawGui.class, new Handler<RedrawGui>() {
public void handle( StartCalculation calc ){
// gui neu binden, das hier laeuft im EDT
}
});
Java:
modelEventHandler.handleEvent( StartCalculation.class, new Handler<StartCalculation>() {
public void handle( StartCalculation calc ){
// hier laeuft alles in einem extra Modelthread
eventDispatcher.publishEvent( new RedrawGui() );
}
});
Anmerkungen:
1) Entweder du schickst alle notwendigen Daten stets in den Events mit (bei grossen Datenmengen kaum machbar), oder du musst wenigstens Getter synchronisieren, damit ein thread-uebergreifender Zugriff z.B. auf das Modell moeglich ist.
2) Events koennen supereinfach ueber ein Netzwerk geschickt werden (mehr Threads, Netzwerkfaehigkeit, ...)